C#中SQL参数传入空值出错误和如何解决办法
导读:收集整理的这篇文章主要介绍了C#中SQL参数传入空值出错误和如何解决办法,觉得挺不错的,现在分享给大家,也给大家做个参考。C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。注意:S...
收集整理的这篇文章主要介绍了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参数组也不接受null, if(parm != null) 的判断不能少。
以上就是C#中SQL参数传入空值出错误和如何解决办法的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C#中SQL参数传入空值出错误和如何解决办法
本文地址: https://pptw.com/jishu/592291.html