.net 正确处理dbnull值

5cg8jx4n  于 2022-11-26  发布在  .NET
关注(0)|答案(2)|浏览(178)

我编写了一个代码,当用户名与登录到我的程序的用户相同时,该代码从访问数据库中检索电子邮件地址。

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值的功能,使其也显示在表单的文本框中。如何才能成功地检查空值而不使程序运行出错?

63lcw9qa

63lcw9qa1#

根据您的选择,Dim x可以是不同的东西。

Dim x = cmd.ExecuteReader()

但在您情况下,这是object,因为使用option infer时,您需要在同一行上声明和赋值您需要执行Dim x as OleDbDataReader这样,您将在IsDBNull上看到intellisence错误您实际上在此处遇到了后期绑定错误
你应该这样做

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
kcrjzv8t

kcrjzv8t2#

最简单(但棘手的解决方案)的方法可能是

While x.Read()
    Email.Text = x("EmailAddress") & ""
    ...

如果x("EmailAddress")为DBNUll,则Email.Text包含空字符串(=“”)。
在所有其他情况下,它包含EmailAddress列值。

相关问题