簡體   English   中英

正確處理 dbnull 值

[英]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可能是另一回事。 如果選項inferOn ,這是這里的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM