C# DBNull和null说明

null 是.net中无效的对象引用。在数据类型中,对于引用类型的默认只就是为null,表示当前变量不指向任何对象。也称空指针。

DBNull是一个类。DBNull.Value是它唯一的实例。继承自Object

它用来对应数据库的数据为空(<NULL>)时,在.Net中的对应值。

object obj1 = DBNull.Value;

它不是数据类型,只是用来对应数据库中为null的值,表示“不知道”。


例如:数据库一列是int类型,可空,如果在读取数据库是对于DataRow,返回的数据null对应的结果就是DBNull.Value,

它的row[column]返回的值永远不会为null,所以row[column].ToString()这个写法不会抛出NullReferenceException的空指针异常。

接着说,如果想向数据库中的int列的值插入NULL的话,在指定数据库参数@id的时候,如果参数的值应该是DBNull.Value而不是null,如果是null则数据库抛出异常“@xxx 没有指定值”。

DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。

在 IDbCommand(OleDbCommand,SqlCommand...) 的ExecuteScalar的返回值中,情况可以这样分析:

select 1 这样返回的object是 1

select null 这样返回的是DBNull.Value

select isnull(null,1) 返回的是 1

select top 0 id from table1 这样返回的值是null

select isnull(id,0) from table1 where 1=0 返回的值是null


这里 ExecuteScalar 的规则就是,返回第一列,第一行的数据。如果一行都没有,那么ExecuteScalar就返回null。如果有第一行,但是第一列为空,那么返回的是 DBNull 。如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。

你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false,

也就是说null跟DBNull.Value是不等的。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值