正确处理dbnull值

问题描述 投票:0回答:1

我编写了代码,当用户名与登录我的程序的用户名相同时,该代码会从访问数据库中检索电子邮件地址。我希望在名为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:找不到类型为'DBNull'的公共成员'IsDBNull'。 -第7行

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

vb.net ms-access error-handling dbnull
1个回答
0
投票

取决于您的选项,Dim x可能是另一回事。如果选项inferOn,则此处为reader

Dim x = cmd.ExecuteReader()

但是在您的情况下,这是object,因为使用option infer您需要在同一行上声明和分配。您需要执行Dim x as OleDbReader。这样,您将在IsDBNull上看到智能错误。您确实在这里遇到了后期绑定错误

您应该这样做

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

这将解决您的问题。但是您还有更多问题。好的,如果您选择单行/单值,只需使用ExecuteScalar

或者至少是

If x.Read() AndAlso Not DbNull.Value.Equals(x("EmailAddress")) Then
    Email.Text = x("EmailAddress").ToString()
End If
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.