SqlParameter.Value = NULL 引发的数据库异常
2015-05-04 18:29
183 查看
摘自:http://www.cnblogs.com/ccweb/p/3403492.html
运行以上代码,将抛出“过程或函数 'CheckDBNull' 需要参数 '@p1',但未提供该参数。”的异常,问题就出在 p1.Value = null 这句话,这个null可能是某个对象的属性,但只要为null都是会抛出以上异常的。
[原因]
.Net框架规定:IDataParameter在向服务器发送 null 参数值时,用户必须指定 DBNull,而不是 null。系统中的 null 值是一个没有值的空对象。DBNull 用于表示 null 值。
[解决]
在给SqlParameter赋值时,如果参数值为null,将参数赋值为DBNull.Value,如:p1.Value = DBNull.Value
[参考]
IDataParameter接口,SqlParameter类实现该接口:public sealed class SqlParameter : DbParameter, IDbDataParameter, IDataParameter, ICloneable
DBNull和Null的区别,Null是.net中无效的对象引用;DBNull是一个类,DBNull.Value是它唯一的实例,它指数据库中数据为空(<NULL>)时,在.net中的值。
using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = new SqlConnection(@"Data Source=PC201305032338\SQLEXPRESS;Initial Catalog=DBTest;Integrated Security=True"); ; cmd.Connection.Open(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "CheckDBNull"; SqlParameter p1 = new SqlParameter(); p1.ParameterName = "@p1"; p1.DbType = DbType.String; p1.Value = null; cmd.Parameters.Add(p1); string rslt = cmd.ExecuteScalar().ToString(); }
运行以上代码,将抛出“过程或函数 'CheckDBNull' 需要参数 '@p1',但未提供该参数。”的异常,问题就出在 p1.Value = null 这句话,这个null可能是某个对象的属性,但只要为null都是会抛出以上异常的。
[原因]
.Net框架规定:IDataParameter在向服务器发送 null 参数值时,用户必须指定 DBNull,而不是 null。系统中的 null 值是一个没有值的空对象。DBNull 用于表示 null 值。
[解决]
在给SqlParameter赋值时,如果参数值为null,将参数赋值为DBNull.Value,如:p1.Value = DBNull.Value
[参考]
IDataParameter接口,SqlParameter类实现该接口:public sealed class SqlParameter : DbParameter, IDbDataParameter, IDataParameter, ICloneable
DBNull和Null的区别,Null是.net中无效的对象引用;DBNull是一个类,DBNull.Value是它唯一的实例,它指数据库中数据为空(<NULL>)时,在.net中的值。
相关文章推荐
- SqlParameter.Value = NULL 引发的数据库异常
- 更新MySQL数据库( java.sql.SQLException: No value specified for parameter 1) 异常 解决方法
- SqlParameter设定的value值为0时、调用的存储过程获取到的值却为null解决方法
- mysql 数据库字段为datetime类型时默认值为:0000-00-00 00:00:00 查询时异常 java.sql.SQLException:Value '0000-00-00' can not be represented as java.sq
- SqlParameter设定value为0却变成null
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
- asp.net 异常:Message="Value cannot be null.\r\nParameter name: g"
- 从数据库中读取信息时抛出异常java.sql.SQLException: Parameter index out of range (1 > number of parameter
- new MySqlParameter("@val", 0).Value == null的异常
- 报表运行参数为空,Allow NULL value in Multi Value Report Parameter in SQL Server Reporting Services
- SqlParameter Value=0 导致的null
- Optional int parameter 'projectId' is present but cannot be translated into a null value due to bein
- Java 8 Stream槽点之toMap引发的NullPointerException异常
- SqlDataReader引发的异常
- SqlParameter中DateTime,Byte[]类型给数据库赋空值
- Optional int parameter 'pageNumber' is present but cannot be translated into a null value due to bei
- java.sql.SQLException: Value'0000-00-00'异常解决
- 微软企业库中数据库访问代码问题(System.InvalidOperationException: Parameter '@FileContent' exceeds the size limit for the sql_variant datatype.)
- sql中查询类型为int的字段,返回null的异常
- HiveServer2 的jdbc方式创建udf的修改(add jar 最好不要使用),否则会造成异常: java.sql.SQLException: Error while processing statement: null