注意: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) 的判断不能少。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。