[英]Handling dbnull values correctly
當用戶名與登錄我的程序的用戶相同時,我編寫了從訪問數據庫檢索 email 地址的代碼。 我希望在名為Email
的文本框中顯示 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
值添加功能,使其也顯示在表單的文本框中。 如何在程序不出錯的情況下成功檢查 null 值?
取決於您的選擇, Dim x
可能是另一回事。 如果選項infer
是On
,這是這里的reader
Dim x = cmd.ExecuteReader()
但是在您的情況下,這是object
因為使用option infer
您需要在同一行上聲明和分配。 你需要做Dim x as OleDbDataReader
。 這樣,您將在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
最簡單(但棘手的解決方案)可能如下
While x.Read()
Email.Text = x("EmailAddress") & ""
...
如果x("EmailAddress")
是 DBNUll, Email.Text
包含一個空字符串 (= "")。
在所有其他情況下,它包含EmailAddress
列值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.