黑马程序员技术交流社区
标题:
DBNull与null的区别
[打印本页]
作者:
HM朱百青
时间:
2013-5-7 23:20
标题:
DBNull与null的区别
本帖最后由 HM朱百青 于 2013-5-9 23:13 编辑
在数据库中,有些字段是可以为空的,比如而当我们需要用ADO.NET取出来的时候,我们需要判断他是不是为DBNull,而不是判断是否为null,那么这两者有何区别呢?
作者:
许庭洲
时间:
2013-5-8 07:12
1. DBNull直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime;
2. null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。
作者:
郑丹丹1990
时间:
2013-5-8 08:04
学习了~~~~
作者:
王宝生
时间:
2013-5-8 13:16
二者的使用场合不一样,只需要记住在在进行于数据库相关的工作(浏览数据)时,应当使用DBNull,而不是null,如果你使用null将抛出异常。
DBNull最经典的用法如下:
//如果数据库中不存在该值
DataRow row=dt.NewRow();
DateTime? dt;
if( DBNull.Value.Equals(row["time"]) )
{
dt=null;//如果数据库中time列不存在该值,就让dt=null。这里dt是可空类型。
}
else
{
dt=row["time"];
}
因此DBNull最长用于检测数据库中某列是否“缺值”。
刚才是用DataRow取值,如果使用SqlDataReader取值,则可以使用SqlDataReader自己的IsDbNull方法。如下:
SqlDataReader reader=cmd.ExeDataReader();
int index= read.GetOrdinal("time");//获取time列的序号,也就说,time列在数据库中的列索引。
if(reader.IsDbNull(index))//如果time缺值
{
dt=null;
}
else
{
dt=reader.GetDataTime("time");
}
作者:
郎吉祥
时间:
2013-5-8 13:40
关于null,在数据库和在C#中是不一样的,在c#是表示空,没有。在数据库中表示“不知道”。所以在数据库和.net进行查询取值和插入的时候。是要用DBNull和null进行交换的。DBNull代表数据库的null。null代表c#的null。这里就说2个封装好的方法了。楼上已经很具体了。
public static Object FromDbvalue( object obj)//从数据库中取数据,改变为C#能接受的null
{
if (obj == DBNull.Value)
{
return null;
}
else
{
return obj;
}
}
public static Object ToDbvalue(object obj)//往数据库存数据,改变为数据库可接受的DBNull.Value
{
if (obj == null)
{
return DBNull.Value;
}
else
{
return obj;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2