C#中SQL参数传入空值出错误和如何解决办法


本文摘自PHP中文网,作者零下一度,侵删。

C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。

注意:SQL参数是不能接受C#的null值的,传入null就会报错。

下面我们看个例子:

1

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

2

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

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

2

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

2

3

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参数传入空值出错误和如何解决办法的详细内容!

相关阅读 >>

.net是干嘛的和java的区别

c#中匿名委托以及lambda表达式的实例详解

c#开发中遇到的问题分享

.net core 和 .net .framework 相比哪个速度快?

浅谈.net中的浅拷贝和深拷贝

详细了解在.net core 上运行的wordpress

关于.net后台定时服务框架的简单介绍

c#如何计算传入的时间距离今天的时间差的实例分享

c#如何使用ilgenerator实现动态生成函数的实例

.net core 2.0 preview2的详细介绍

更多相关阅读请进入《csharp》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...