小编典典

null和System.DBNull.Value有什么区别?

c#

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有什么区别?


阅读 471

收藏
2020-05-19

共1个答案

小编典典

恩,null不是任何类型的实例。而是,它是无效的引用。

但是,表示数据库中不存在的*值System.DbNull.Value的有效引用System.DbNullSystem.DbNull是单例,并System.DbNull.Value为您提供了该类的单个实例的引用)。

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

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

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

2020-05-19