【发布时间】:2011-06-24 21:49:01
【问题描述】:
null 和 System.DBNull.Value 有什么区别吗?如果有,是什么?
我现在注意到了这种行为 -
while (rdr.Read())
{
if (rdr["Id"] != null) //if (rdr["Id"] != System.DBNull.Value)
{
int x = Convert.ToInt32(rdr["Id"]);
}
}
虽然我使用 sql 数据读取器从数据库中检索数据,但没有返回值 if(rdr["Id"] != null) 返回 true 并最终引发了将 null 转换为整数的异常。
但是,如果我使用if (rdr["Id"] != System.DBNull.Value),这将返回false。
null 和 System.DBNull.Value 有什么区别?
【问题讨论】:
-
嗯,它们是无关的。一个是
System.Data中类的静态实例,另一个是表示缺少所指对象的特殊值。他们彼此没有任何关系。你能详细说明你对什么感到困惑吗?你真正的问题是“为什么DataRows和DataReaders将DBNull.Value放在自己内部而不是null?” -
嗯,我一开始不是这样,但在了解了你所说的之后,我很好奇。你能告诉我为什么 DataRows 和 DataReaders 把 DBNull.Value 放在自己里面而不是 null 吗?
-
我自己也不确定。这是一个答案:stackoverflow.com/questions/4488727/what-is-the-point-of-dbnull/… 也有可能在 C# 中出现可空值类型之前,处理
null会更加麻烦。 -
我在这里有一个答案,但我意识到它更适合stackoverflow.com/questions/4488727/what-is-the-point-of-dbnull - 所以我移动了它