本书显示了以下代码并说第一次条件检查是正确的,因为strMyString是NOTHING,但是当我运行程序时,我没有输出到控制台。如果我将我的第一个IF语句更改为IF NOT strMyString是sysNull,那么我在控制台上得到“Initialize my string”。这本书适用于VB 2008,我使用的是VB 2013,所以这只是因为版本的差异?或者这本书是拼写错误的?
Dim sysNull As System.DBNull = System.DBNull.Value
Dim strMyString As String = Nothing
If strMyString Is sysNull Then
strMyString = "Initialize my String"
End If
If Not IsDBNull(strMyString) Then
Console.WriteLine(strMyString)
End If
Console.ReadLine()
答案 0 :(得分:2)
DBNull
类型专门用于表示数据库中的NULL值,因此是“DB”前缀。这是必需的,因为早期版本的.NET不支持可空值的类型,例如将Nothing
分配给Integer
变量会将其赋值为零。
如果您正在使用数据库,那么您可以比较任何Object
对DBNull.Value
的引用,以查看您是否从数据库中获取NULL,例如Item
或数据阅读器的DataRow
属性。您还可以将DBNull.Value
分配给参数的Item
或DataRow
属性的Value
属性,以将NULL保存到数据库。
如果您不使用数据库,那么您根本不应该使用DBNull
。如果您要测试或不指定任何对象,则只使用Nothing
。请注意,DBNull.Value
和Nothing
完全不同。 Nothing
根本不是对象,而DBNull.Value
是DBNull
类型的对象,在数据库字段中没有任何值。
另外,我建议不要使用从VB6继承的IsDBNull
方法。 DataRow
和数据读取器都有自己的方法来测试NULL值,否则使用它:
If myField Is DBNull.Value Then
如果要根据对象引用是否为Nothing
来确定是否将NULL保存回数据库,则可以执行以下操作:
If myObject Is Nothing Then
myParameter.Value = DBNull.Value
Else
myParameter.Value = myObject
End If
对于可以看起来像这样的可空值类型:
If myNullable.HasValue Then
myParameter.Value = myNullable.Value
Else
myParameter.Value = DBNull.Value
End If