正确处理 dbnull 值

Handling dbnull values correctly

我编写了代码,当用户名与登录我的程序的用户相同时,它会从访问数据库中检索电子邮件地址。我希望在名为 Email

的文本框中显示电子邮件地址值
Dim x

If ConnectionDb.State = ConnectionState.Closed Then ConnectionDb.Open()
Dim cmd As OleDbCommand = ConnectionDb.CreateCommand
cmd.CommandText = " SELECT ID, EmailAddress, TelephoneNo FROM tblContacts WHERE ID='" & NameVariable & "'"
x = cmd.ExecuteReader()
While x.Read()
    If x("EmailAddress").IsDBNull(0) Then
        Return
    Else
        Email.Text = x.GetString(0)
    End If
 . . . . 

但是,当程序是 运行 时,我收到以下错误,因为一些用户没有 EmailAddress 的值:

System.MissingMemberException: 'Public member 'IsDBNull' on type 'DBNull' not found.' - line 7

我还希望添加功能,使 TelephoneNo 值也显示在表单的文本框中。 如何在程序 运行ning 不出错的情况下成功检查空值?

取决于您的选择,Dim x 可能是另一回事。如果选项 inferOn,这里是 reader

Dim x = cmd.ExecuteReader()

但在您的情况下,这是 object,因为对于 option infer,您需要在同一行上声明和分配。你需要做 Dim x as OleDbDataReader。这样您将在 IsDBNull 上看到智能错误。你真的 运行 这里出现了后期绑定错误

你应该这样做

If DbNull.Value.Equals(x("EmailAddress")) Then

这将解决您的问题。但是你有更多的问题。好的,如果您 select 单个 row/single 值,只需使用 ExecuteScalar.

或者,至少

If x.Read() AndAlso Not DbNull.Value.Equals(x("EmailAddress")) Then
    Email.Text = x("EmailAddress").ToString()
End If