C#中SQL参数传入空值报错解决方案
程序员文章站
2023-11-17 10:21:22
c#中的null与sql中的null是不一样的,sql中的null用c#表示出来就是dbnull.value。
注意:sql参数是不能接受c#的null值的,传入null...
c#中的null与sql中的null是不一样的,sql中的null用c#表示出来就是dbnull.value。
注意:sql参数是不能接受c#的null值的,传入null就会报错。
下面我们看个例子:
sqlcommand cmd=new sqlcommand("insert into student values(@stuname,@stuage)" ,conn); cmd.parameters.add("@stuname" ,stuname); cmd.parameters.add("@stuage" ,stuage); cmd.executenonquery();
上述代码咋看冇问题,其实当stuname或stuage的值为null时,就会抛出异常。那怎么解决呢?
解决方案:当stuname或stuage的值为null时,传入dbnull.value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回dbnull.value,否则返回原值。
public static object sqlnull(object obj) { if(obj == null) { return dbnull.value; } else { return obj; } }
调用上述方法后的代码如下:
sqlcommand cmd=new sqlcommand("insert into student values(@stuname,@stuage)" ,conn); cmd.parameters.add("@stuname" ,sqlnull(stuname)); cmd.parameters.add("@stuage" ,sqlnull(stuage)); cmd.executenonquery();
另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是""),如果想实现当控件的值为""(如文本框中没有输入字符)时,数据表字段值为null,只需对sqlnull方法稍作修改:
public static object sqlnull(object obj) { if(obj == null || obj.tostring() == "") { return dbnull.value; } else { return obj; } }
延伸:
传sql参数还可以传参数组,如下:
sqlparameter[] parm = new sqlparameter[] { new sqlparameter("@stuname", sqlnull(stuname)), new sqlparameter("@stuage", sqlnull(stuage)) } if(parm != null) { cmd.parameters.addrange(parm); } cmd.executenonquery();
注意:new sqlparameter(参数名, 参数值)里的参数值同样不接受null值,且parm参数组也不接受null, if(parm != null) 的判断不能少。
以上所述是小编给大家介绍的c#中sql参数传入空值报错解决方案,希望对大家有所帮助
上一篇: 华为watch 2使用教程!