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.DbNullSystem.DbNull是单例,并System.DbNull.Value为您提供了该类的单个实例的引用)。

*我们通常会说null,但我不想混淆这个问题。

因此,两者之间存在很大的概念差异。关键字null代表无效的参考。该类System.DbNull表示数据库字段中不存在的值。通常,我们应该尝试避免使用同一事物(在这种情况下null)来表示两个截然不同的概念(在这种情况下,无效引用与数据库字段中不存在的值)。

请记住,这就是为什么很多人通常主张使用空对象模式的原因,这正是System.DbNull一个例子。

以上是 null和System.DBNull.Value有什么区别? 的全部内容, 来源链接: utcz.com/qa/404267.html

回到顶部