null和System.DBNull.Value有什么区别?
null和System.DBNull.Value之间有什么区别吗?如果是,那是什么?
我现在注意到了这种行为-
while (rdr.Read()){
if (rdr["Id"] != null) //if (rdr["Id"] != System.DBNull.Value)
{
int x = Convert.ToInt32(rdr["Id"]);
}
}
虽然我使用sql datareader从数据库检索数据,但是没有返回if(rdr["Id"] !=
null)返回的值true
,最终引发了将null强制转换为整数的异常。
但是,如果我使用if (rdr["Id"] != System.DBNull.Value)
return的话false
。
null和System.DBNull.Value有什么区别?
回答:
恩,null
不是任何类型的实例。而是,它是无效的引用。
但是,表示数据库中不存在的*值System.DbNull.Value
的有效引用System.DbNull
(System.DbNull
是单例,并System.DbNull.Value
为您提供了该类的单个实例的引用)。
*我们通常会说null
,但我不想混淆这个问题。
因此,两者之间存在很大的概念差异。关键字null
代表无效的参考。该类System.DbNull
表示数据库字段中不存在的值。通常,我们应该尝试避免使用同一事物(在这种情况下null
)来表示两个截然不同的概念(在这种情况下,无效引用与数据库字段中不存在的值)。
请记住,这就是为什么很多人通常主张使用空对象模式的原因,这正是System.DbNull
一个例子。
以上是 null和System.DBNull.Value有什么区别? 的全部内容, 来源链接: utcz.com/qa/404267.html