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) 的判断不能少

转载于:https://www.cnblogs.com/Scl891004X/p/6962113.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值