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参数传入空值出错误和如何解决办法02-21
- szq.orm.sql02-21
- jquery pqgrid分页控件乱码是什么情况?02-21
- Win10应该改进的10个方面是否应把免费放首位02-21
- Win10的没用的应用软件怎么办?不喜欢可以完全卸02-21
- Win10系统邮件和日历同步错误0x80c8043e的解决办法02-21
- easyui怎么刷新当前tabs02-21
- 分享一些平时收藏和应用的开源代码02-21
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- jquery pqgrid分页控件乱码是什么情况?
jquery pqgrid分页控件乱码是什么情况?
26-02-21 - Win10应该改进的10个方面是否应把免费放首位
Win10应该改进的10个方面是否应把免费放首位
26-02-21 - Win10的没用的应用软件怎么办?不喜欢可以完全卸
Win10的没用的应用软件怎么办?不喜欢可以完全卸
26-02-21 - Win10系统邮件和日历同步错误0x80c8043e的解决办法
Win10系统邮件和日历同步错误0x80c8043e的解决办法
26-02-21 - 属性值反序列化失败怎么解决?
属性值反序列化失败怎么解决?
26-02-21 - 让WebAPI 返回JSON格式的数据实例教程
让WebAPI 返回JSON格式的数据实例教程
26-02-21 - 契约类相关的序列化与反序列化实例详解
契约类相关的序列化与反序列化实例详解
26-02-21 - dotnet 命令如何使用?
dotnet 命令如何使用?
26-02-21 - 总结委托和事件的联系和区别
总结委托和事件的联系和区别
26-02-21 - 用Shape做动画实例代码
用Shape做动画实例代码
26-02-21
