C#中SQL参数传入空值出错误和如何解决办法

C#中的null与sql中的NULL是不一样的,sql中的NULL用C#表示出来就是dbnull.Value。

注意:sql参数是不能接受C#的null值的,传入null就会报错

下面我们看个例子:

1 sqlCommand cmd=new  sqlCommand(Insert into Student values(@StuName,@StuAge) ,conn);2 cmd.parameters.add(@StuName ,stuName);3 cmd.parameters.add(@StuAge ,stuAge);4 cmd.ExecuteNonQuery();

上述代码咋看冇问题,其实当stuName或stuAge的值为null时,就会抛出异常。那怎么解决呢?
解决方案:当stuName或stuAge的值为null时,传入dbnull.Value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回dbnull.Value,否则返回原值。

 1 public static object sqlNull(object obj) 2 { 3   if(obj == null) 4   { 5     return dbnull.Value; 6   } 7   else 8   { 9     return obj;10   }    
11 }

调用上述方法后的代码如下:

1 sqlCommand cmd=new  sqlCommand(Insert into Student values(@StuName,@StuAge) ,conn);2 cmd.parameters.add(@StuName ,sqlNull(stuName));3 cmd.parameters.add(@StuAge ,sqlNull(stuAge));4 cmd.ExecuteNonQuery();

另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是),如果想实现当控件的值为(如文本框中没有输入字符)时,数据表字段值为NULL,只需对sqlNull方法稍作修改

 1 public static object sqlNull(object obj) 2 { 3    if(obj == null || obj.ToString() == ) 4    { 5      return dbnull.Value; 6    } 7    else 8    { 9      return obj;10    }    
11  }

延伸:

sql参数还可以传参数组,如下:

 1 sqlParameter[] parm = new sqlParameter[] 2 { 3   new sqlParameter(@StuName, sqlNull(stuName)), 4   new sqlParameter(@StuAge, sqlNull(stuAge))  
 5 } 6 if(parm != null) 7 { 8   cmd.Parameters.AddRange(parm);   
 9 }10 cmd.ExecuteNonQuery();

注意:new sqlParameter(参数名, 参数值)里的参数值同样不接受null值,且parm参数组也不接受nullif(parm != null) 的判断不能少

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...