正确处理 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
可能是另一回事。如果选项 infer
是 On
,这里是 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
我编写了代码,当用户名与登录我的程序的用户相同时,它会从访问数据库中检索电子邮件地址。我希望在名为 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
可能是另一回事。如果选项 infer
是 On
,这里是 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