簡體   English   中英

從“DBNull”類型到“String”類型的轉換無效

[英]Conversion from type 'DBNull' to type 'String' is not valid

我收到這個問題

從“DBNull”類型到“String”類型的轉換無效。

第 501 行:hfSupEmail.Value = dt.Rows(0)("SupEmail")

我對此很陌生,我不太確定確切的問題是什么,有人可以指導我嗎?

非常感謝

快速而骯臟的修復:

hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()

或對於 C#:

hfsupEmail.Value = dt.Rows[0]["SupEmail"].ToString();

當您的最終目標和源數據已經是字符串時,這非常有效,因為對已經是字符串的任何額外的.ToString()調用可能會被抖動優化為無操作,如果它是 NULL 結果DBNull.Value.ToString()表達式生成您想要的空字符串。

但是,如果您正在使用非字符串類型,您最終可能會做大量的額外工作,尤其是在您需要特定格式的DateTime或數值之類的東西上。 請記住,國際化問題意味着解析和組合日期和數字值實際上是非常昂貴的操作; 做“額外”的工作來避免這些操作通常是值得的。

希望這有助於.... dt.Rows(0)("SupEmail")返回 null

在分配之前避免此檢查

If Not IsDBNull(dt.Rows(0)("SupEmail")) Then
    hfSupEmail.Value = dt.Rows(0)("SupEmail")
End If

顯然,您的dt.Rows(0)("SupEmail")來自 DB 為 NULL,您不能將 NULL 分配給字符串屬性。 嘗試用以下內容替換該行:

hfSupEmail.Value = If(IsDbNull(dt.Rows(0)("SupEmail")), String.Empty, dt.Rows(0)("SupEmail").ToString)

代碼檢查值是否為 NULL,如果是 - 用空字符串替換它,否則使用原始值。

您應該在數據庫查詢級別本身處理它。

instead of "select name from student", use "select IsNull(name,'') as name from student"

這樣,DB 將處理您的 NULL 值。

為了從代碼中處理它,這里有一個小的擴展方法

Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices

Public Module HTMLExtensionMethods
    <Extension()> _
    Public Function DefaultIfDBNull(Of T)(ByVal obj As Object) As T
        Return If(Convert.IsDBNull(obj), CType(Nothing, T), CType(obj, T))
    End Function
End Module

這樣稱呼。

hfSupEmail.Value = dt.Rows(0)("SupEmail").DefaultIfDBNull(Of String)()

您可以使用DatarowField 方法結合If 運算符來檢查一行中的 Null 值,如下所示。 如果它為空,您可以用空字符串(或您選擇的另一個字符串)替換它:

hfSupEmail.Value = If(dt.Rows(0).Field(Of String)("SupEmail"), "")

最簡單的方法可能是將它與一個空字符串連接起來:

hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""
        con.Open()
        cmd = New SqlCommand
        cmd.CommandText = " select  sum (Income_Amount)  from Income where Income_Month= '" & ComboBox1.Text & "' and Income_year=" & txtyearpro.Text & ""
        cmd.Connection = con
        dr = cmd.ExecuteReader
        If dr.Read = True Then
            txtincome1.Text = dr(0).ToString  ' ToString  converts null values into string '

        End If

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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