VB DBNull不像书那样说它应该

时间:2014-05-28 02:15:23

标签: vb.net

本书显示了以下代码并说第一次条件检查是正确的,因为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()

1 个答案:

答案 0 :(得分:2)

DBNull类型专门用于表示数据库中的NULL值,因此是“DB”前缀。这是必需的,因为早期版本的.NET不支持可空值的类型,例如将Nothing分配给Integer变量会将其赋值为零。

如果您正在使用数据库,那么您可以比较任何ObjectDBNull.Value的引用,以查看您是否从数据库中获取NULL,例如Item或数据阅读器的DataRow属性。您还可以将DBNull.Value分配给参数的ItemDataRow属性的Value属性,以将NULL保存到数据库。

如果您不使用数据库,那么您根本不应该使用DBNull。如果您要测试或不指定任何对象,则只使用Nothing。请注意,DBNull.ValueNothing完全不同。 Nothing根本不是对象,而DBNull.ValueDBNull类型的对象,在数据库字段中没有任何值。

另外,我建议不要使用从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