C#中SQL参数传入空值报错解决方案
2017-06-09 09:05
429 查看
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参数传入空值报错解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
相关文章推荐
- C# 如何把dataTable以参数的形式传入 sql 存储过程
- 在C#中的SQL 传入like参数和时间类型
- C# SQL带传入、输出参数及返回值的存储过程
- C#调用SQL存储过程以及返回值和参数的获取
- C#中SQL语句参数写法
- [转]C#中SQL语句参数写法。
- C#中使用含参数的SQL语句一定要注意参数长度的设置
- 执行动态SQL语句时传入参数
- Sql 2005 存储过程参数【多次引用】结合C#影响输出速度问题
- 在c#中执行sql语句时传递参数的小经验_C#教程
- 在c#中执行sql语句时传递参数的小经验_C#教程
- 关于在设计SqlDataAdapter并使用带有参数的 SQL或存储过程时,出现的必须声明 @参数名 的错误解决方案
- SQL2005报表参数大于2K问题的终极解决方案
- 存储过程/SQL中参数传入传出的写法
- 以表达式作为参数传入SQL的存储过程中去
- 【转】c# 数据库的 sql 参数封装类的编写
- 在c#中执行sql语句时传递参数的小经验
- 在c#中执行sql语句时传递参数的小经验
- c#WINFROM窗体之间传递参数的解决方案
- 12-C#中SQL语句参数写法 orcale