【问题标题】:VB DBNull not working like book says it shouldVB DBNull 不像书上说的那样工作
【发布时间】:2014-05-28 02:15:23
【问题描述】:

这本书显示了以下代码,并说第一次条件检查将是真的,因为 strMyString 是 NOTHING,但是当我运行程序时,我没有得到控制台的输出。如果我将第一个 IF 语句更改为 IF NOT strMyString is sysNull,那么我会在控制台上看到“初始化我的字符串”。这本书适用于 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()

【问题讨论】:

  • Nothing 和 DBNull 不是一回事。使用If strMyString Is Nothing Then

标签: vb.net


【解决方案1】:

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

如果您正在使用数据库,那么您可以将任何 Object 引用与 DBNull.Value 进行比较,以查看您是否从数据库中获得了 NULL,例如DataRow 或数据读取器的 Item 属性。您还可以将DBNull.Value 分配给DataRowItem 属性或参数的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多