BestWaytoAssignNULLValuestoSqlParameter我在C#类方法中使用了很多可选的输入参数。由于可选语法在未使用参数时创建值“0”,因此我在方法中调用的SQL插入命令将像这样插入。但是,我需要命令在不使用参数时插入NULL值而不是0。在不使用大量“if”语句的情况下实现此目标的最佳方法是什么?下面是我所指的代码。是否有语言/某种命令允许我在SqlParameter声明中指定NULL值?publicintbatchInsert(intid,intoutcome,intinput=0,intadd=0,intupdate=0,intdelete=0,interrors=0,intwarnings=0){字符串sts;如果(结果==0){sts=“S”;}elseif(outcome==1){sts="W";}else{sts="E";}SqlConnectionsqlConn=newSqlConnection(this.connString);SqlParameterrunId=newSqlParameter("@runId",id);SqlParameterendTime=newSqlParameter("@endTime",DateTime.Now);SqlParameterstatus=newSqlParameter("@status",sts);SqlParametersqlInput=newSqlParameter("@itemsRead",输入);SqlParametersqlAdd=newSqlParameter("@add",添加);SqlParametersqlUpdate=newSqlParameter("@update",更新);SqlParametersqlDelete=newSqlParameter("@delete",delete);SqlParametersqlError=newSqlParameter("@errors",错误);SqlParametersqlWarning=newSqlParameter("@warnings",warnings);SqlParameterresult=newSqlParameter("@outcome",results[outcome]);小号qlCommandsqlComm=newSqlCommand(insertCommand(),sqlConn);是的,对于参数的值,只需使用DBNull.Valueeg:SqlParametersqlError=newSqlParameter("@errors",errors==0?(object)DBNull.Value:errors);或者写一个小帮手:privateobjectValueOrDBNullIfZero(intval){if(val==0)returnDBNull.Value;返回值;然后:SqlParametersqlError=newSqlParameter("@errors",ValueOrDBNullIfZero(errors));您需要检查每个参数值并使用DBNull.Value发送空值。我们在对象上有一个扩展方法,使这更容易一些。publicstaticclassObjectExtensions{publicstaticobjectOptionalParam(thisTvalue,ToptionalValue=default(T)){returnEquals(value,optionalValue)?(对象)DBNull.Value:值;}}用法:varsqlInput=newSqlParameter("@itemsRead",input.OptionalParam());或者,如果您想将非默认值视为默认值:varsqlInput=newSqlParameter("@itemsRead",input.OptionalParam(-1));这是为sql参数指定Null值最简单的方法考虑使用可用的Nullable(T)结构。它只允许您设置值(如果有),并且您的SQL命令对象将识别可为null的值并相应地进行处理而不会出现问题。使用一个小的辅助类,我们可以创建扩展方法来使用System;将DBNull.Value添加到sqlparameter。使用System.Collections.Generic;使用System.Linq;使用System.Web;使用System.Data.SqlClient;使用系统数据;使用System.Data.Common;namespaceSystem.Data.SqlClient{publicstaticclassExtensionMethods{publicstaticSqlParameterAddParameter(thisSqlParameterCollectionparms,SqlParameterparam){if(param.Value==null){param.Value=DBNull.Value;返回parms.Add(参数);}else{返回parms.Add(参数);}}}使用SqlParameter_FraudPackageID=newSqlParameter("@FraudPackageID",System.Data.SqlDbType.BigInt);_FraudPackageID.Value=FraudPackageID;_FraudPackageID.Direction=System.Data.ParameterDirection.Input;_cmd.Parameters.AddParameter(_FraudPackageID);如果将null作为值分配或传递给sqlparameter,此扩展方法将自动将其转换为DBNull并重新分配给sqlparameter。所以不用担心我们动态传递的值。语法短!cmd.Parameters.Add(newSqlParameter{SqlValue=username??(object)DBNull.Value,ParameterName="usuario"});另一种必要时显式设置nulldatetime参数的方法以上是C#学习教程:把NULL赋值给SqlParameter的最佳方法分享的所有内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注——if(obj.myDate==DateTime.MinValue){aCommand.Parameters.Add("dateParameter",SqlDbType.Date).Value=DBNull.Value;}else{aCommand.Parameters.Add("dateParameter",SqlDbType.Date).Value=obj.myDate;}本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
