欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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参数传入空值报错解决方案,希望对大家有所帮助