C#中SQL参数传入空值报错解决方案
作者:邪心魔佛一页书 时间:2023-12-14 14:28:59
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。
注意:SQL参数是不能接受C#的null值的,传入null就会报错。
下面我们看个例子:
SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
cmd.parameters.add("@StuName" ,stuName);
cmd.parameters.add("@StuAge" ,stuAge);
cmd.ExecuteNonQuery();
上述代码咋看冇问题,其实当stuName或stuAge的值为null时,就会抛出异常。那怎么解决呢?
解决方案:当stuName或stuAge的值为null时,传入DBNull.Value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回DBNull.Value,否则返回原值。
public static object SqlNull(object obj)
{
if(obj == null)
{
return DBNull.Value;
}
else
{
return obj;
}
}
调用上述方法后的代码如下:
SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
cmd.parameters.add("@StuName" ,SqlNull(stuName));
cmd.parameters.add("@StuAge" ,SqlNull(stuAge));
cmd.ExecuteNonQuery();
另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是""),如果想实现当控件的值为""(如文本框中没有输入字符)时,数据表字段值为NULL,只需对SqlNull方法稍作修改:
public static object SqlNull(object obj)
{
if(obj == null || obj.ToString() == "")
{
return DBNull.Value;
}
else
{
return obj;
}
}
延伸:
传SQL参数还可以传参数组,如下:
SqlParameter[] parm = new SqlParameter[]
{
new SqlParameter("@StuName", SqlNull(stuName)),
new SqlParameter("@StuAge", SqlNull(stuAge))
}
if(parm != null)
{
cmd.Parameters.AddRange(parm);
}
cmd.ExecuteNonQuery();
注意:new SqlParameter(参数名, 参数值)里的参数值同样不接受null值,且parm参数组也不接受null, if(parm != null) 的判断不能少。
以上所述是小编给大家介绍的C#中SQL参数传入空值报错解决方案网站的支持!
来源:http://www.cnblogs.com/Scl891004X/archive/2017/06/08/6962113.html
标签:c#,sql,参数,空值
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android版本更新实例详解
2023-08-05 21:54:54
![](https://img.aspxhome.com/file/2023/1/85981_0s.png)
Java多线程-线程的同步与锁的问题
2023-11-29 01:40:12
详解BadTokenException报错解决方法
2021-11-27 06:18:20
![](https://img.aspxhome.com/file/2023/2/139412_0s.jpg)
Java的关键字与标识符小结
2023-08-17 08:36:50
![](https://img.aspxhome.com/file/2023/2/72602_0s.png)
java 字浮串提取方法汇集
2023-11-24 14:43:16
IDEA基于支付宝小程序搭建springboot项目的详细步骤
2021-10-30 22:44:46
![](https://img.aspxhome.com/file/2023/3/69933_0s.png)
java利用多线程和Socket实现猜拳游戏
2022-10-03 08:03:30
![](https://img.aspxhome.com/file/2023/9/64549_0s.jpg)
Android 背景透明度设置总结
2023-06-06 04:31:13
![](https://img.aspxhome.com/file/2023/8/111718_0s.png)
c#实现服务器性能监控并发送邮件保存日志
2023-09-10 11:56:14
JAVA IDEA入门使用手册(新手小白必备)
2022-10-21 16:31:25
![](https://img.aspxhome.com/file/2023/2/112082_0s.jpg)
Java使用excel工具类导出对象功能示例
2022-07-04 23:06:50
Java实现Redis的集合(set)命令操作
2022-05-08 11:07:03
![](https://img.aspxhome.com/file/2023/4/61954_0s.jpg)
Android热修复Tinker接入及源码解读
2023-11-14 09:27:18
![](https://img.aspxhome.com/file/2023/9/138629_0s.jpg)
使用Android开发接入第三方原生SDK实现微信登录
2023-04-05 09:41:14
SSM Mapper文件查询出返回数据查不到个别字段的问题
2023-10-17 01:02:08
![](https://img.aspxhome.com/file/2023/3/58603_0s.png)
浅谈C#设计模式之代理模式
2023-01-23 14:30:59
Android开发两个activity之间传值示例详解
2023-11-27 20:00:45
常见的java面试题
2023-11-26 18:03:44
Android图像处理之霓虹滤镜效果
2023-08-11 14:37:41
![](https://img.aspxhome.com/file/2023/3/138993_0s.jpg)
详解MybatisPlus中@Version注解的使用
2023-11-09 23:49:17
![](https://img.aspxhome.com/file/2023/5/125235_0s.jpg)