博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# DBNull和null说明
阅读量:4287 次
发布时间:2019-05-27

本文共 1009 字,大约阅读时间需要 3 分钟。

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是不等的。

转载地址:http://mdogi.baihongyu.com/

你可能感兴趣的文章
论文解读 | QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION
查看>>
linux 安装nginx
查看>>
linux 搭建rocketmq集群
查看>>
linux 安装zookeeper集群
查看>>
RocketMq单机安装(Windows)
查看>>
Windows 上安装 MySQL
查看>>
eclipse 的mybatis中mapper.xml文件标签没有提示的解决方法
查看>>
linux 上一主两从mysql集群中某台数据库宕机解决方法
查看>>
大牛面试指南
查看>>
android入门(一)---UI组件之文本框(TextView)
查看>>
演示动画怎么实现的
查看>>
android入门---Activity组件.活动(一)
查看>>
Android入门---GridView组件
查看>>
获取apk文件上的精美图片素材
查看>>
JAVA中文乱码解决方法
查看>>
端口号占用问题 serveral ports(8080,8009) are already in use
查看>>
浅析JAVA的抽象和接口
查看>>
SeekBar控件入门
查看>>
SharedPreference存储实战之记住登陆账号密码
查看>>
如何在项目的任何地方轻松获取到全局状态信息Context
查看>>