当前位置: 移动技术网 > IT编程>开发语言>c# > C#中SQL参数传入空值报错解决方案

C#中SQL参数传入空值报错解决方案

2019年07月18日  | 移动技术网IT编程  | 我要评论
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参数传入空值报错解决方案,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网