本文摘自PHP中文网,作者零下一度,侵删。
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。注意:SQL参数是不能接受C#的null值的,传入null就会报错。
下面我们看个例子:
1 | 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 2 | 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 | 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 2 | 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 2 3 | 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参数组也不接受null, if(parm != null) 的判断不能少。
以上就是C#中SQL参数传入空值出错误和如何解决办法的详细内容!
相关阅读 >>
.net页面局部更新引发的思考
介绍asp.net使用session的方法
.net中json数据进行序列化和反序列化操作分析
c#基础之操作优化实例教程
.net core2.0小技巧之memorycache问题修复解决的方法(图)
有关.net mvc长轮询的实现方法
c#中五种访问修饰符作用范围实例详解
介绍c#中的接口
使用c#操作windowad之的windows用户组
解析.net逻辑分层架构
更多相关阅读请进入《csharp》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#中SQL参数传入空值出错误和如何解决办法