在.NET中,存在一个null
引用,该引用到处都用于表示对象引用为空,然后是DBNull
,该引用由数据库驱动程序(和其他一些驱动程序)用来表示...几乎是同一件事。自然,这会引起很多混乱,必须转换转换例程,等等。
那么,最初的.NET作者为什么决定这样做呢?对我而言,这没有任何意义。他们的文档也没有意义:
DBNull类表示一个不存在的值。例如,在数据库中,表行中的列可能不包含任何数据。即,该列被认为根本不存在,而不仅仅是没有值。DBNull对象表示不存在的列。此外,COM互操作使用DBNull类来区分VT_NULL变体和VT_EMPTY变体,VT_NULL变体表示不存在的值,而VT_EMPTY变体表示未指定的值。
关于“不存在的列”的废话是什么?有一列存在,只是没有特定行的值。如果不存在,则尝试访问特定单元格时会出现异常,而不是DBNull
!我可以理解需要区分VT_NULL
和VT_EMPTY
,但是为什么不COMEmpty
上课呢?这将更适合整个.NET框架。
我想念什么吗?谁能说出为什么DBNull
发明以及它可以解决什么问题?