Null
null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。也就是只有引用型的变量可以为null,如果 int i=null,的话,是不可以的,因为Int是值类型的。
""和String.Empty
这两个都是表示空字符串,一个意思。其中要注意的重点是string str1="" 和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的;string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。
DBNull
该类用于指示不存在某个已知值(通常在数据库应用程序中)。
在数据库应用程序中,空对象是字段的有效值。该类区分空值(空对象)和未初始化值(DBNull.Value 实例)。例如,表可以包含具有未初始化字段的记录。默认情况下,这些未初始化字段具有 DBNull 值。
该类还可以用于在 COM Interop 中区分 VT_NULL 变量(与空对象关联)和 VT_EMPTY 变量(与 DBNull.Value 实例关联)。
DBNull 从不等于任何值。
DBNull在DotNet是单独的一个类型 System.DBNull 。它只有一个值 DBNull.Value 。DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime ...... 访问 SQL数据库的数据密集应用程序必须使用 System.Data.SqlTypes 类,这些类对空值具有内在支持。
DBNull唯一作用是表示数据库中表和视图的字符串,数字,或日期为空。因为数据库NULL和C#中的null不同。DotNet储存这些数据的类(DataRow等)都是以 object 的形式即对象形式来储存数据的。但是对于DataRow等这些数据库类 , 它的 row[column] 返回值永远不会是 null , 要么就是具体的为column 的类型的值 ,要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。DBNull 实现了 IConvertible接口(使用 IConvertible 接口基本公共语言运行库类型中的转换)。但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。 5rt.IsDBNull()4ne.com
Convert.IsDBNull()用来判断对象是否为DBNULL的。其返回值是True或Flase。 注意Convert.isDBNull(null)为false。