web-dev-qa-db-ja.com

タイプ「DBNull」からタイプ「String」への変換は無効です

私はこの問題を受け取っています

タイプ「DBNull」からタイプ「String」への変換は無効です。

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

私はこれに非常に新しいです、私は誰かが私を導くことができる正確な問題が何であるか本当に本当にわかりませんか?

どうもありがとう

20
user3571305

迅速で汚い修正:

_hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()
_

これは、最終的なターゲットとソースデータが既に文字列である場合に非常にうまく機能します。これは、すでに文字列になっているものに対する余分な.ToString()呼び出しは、通常ジッターによってノーオペレーションに最適化され、NULLの場合、結果のDBNull.Value.ToString()式は空を生成するためです。必要な文字列。

ただし、非文字列型を使用している場合、特にDateTimeまたは数値のような特定の書式設定が必要な場合は、significant余分な作業を行うことになります。国際化の懸念は、日付と数値の解析と作成が実際には驚くほど高価な操作であることを忘れないでください。これらの操作を回避するために「余分な」作業を行うことは、多くの場合価値があります。

26
Joel Coehoorn

このヘルプを願っています... dt.Rows(0)("SupEmail")はnullを返します

割り当てる前にこのチェックを回避するには

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

どうやらあなたのdt.Rows(0)("SupEmail")はDBからNULLとして来ており、文字列プロパティにNULLを割り当てることはできません。その行を次のように置き換えてみてください:

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

コードは、値がNULLかどうかをチェックし、値がNULLである場合、空の文字列で置き換えます。それ以外の場合は元の値を使用します。

2
Yuriy Galanter

DBクエリレベル自体で処理する必要があります。

「学生から名前を選択する」の代わりに、「選択する 名前としてIsNull(name、 '') 学生から "

このようにして、DBはNULL値を処理します。

2
Amnesh Goel

コードからそれを処理するために、ここに小さな拡張メソッドがあります

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)()
1
naveen

DatarowのFieldメソッドIf演算子 を組み合わせて使用​​すると、このような1行でNull値を確認できます。 nullの場合、空の文字列(または選択した別の文字列)に置き換えることができます。

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

最も簡単な方法は、おそらく空の文字列で連結することです。

hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""
0
FrankB