0

注: この問題は、Null 値だけに関係するものではありません。より具体的には、double 以外の値と、リーダーの変換割り当てによる処理に関係しています。

Convert....でリーダーがエラーをスローする前に、このリーダー値の空白または非 double 値をチェックする方法を探しています

Dim Load_Pc As Double = Convert.ToDouble(reader("Load_Pc"))

リーダーが空白の場合、または値を処理できない場合、Load_Pc に何も割り当てない方法はありますか?

4

2 に答える 2

1

Double場合、答えはノーです。

ただし、Double?の場合、答えは「はい」になります。詳細については、null 許容型を確認してください。

于 2013-10-16T13:18:08.213 に答える
1

「空白」と言うので、列の実際のタイプはstring.

次にDouble.TryParse、それがnullか空かを使用または確認できます

Dim ordinalIndex = reader.GetOrdinal("Load_Pc")
Dim Load_Pc As Double = Double.MinValue
If Not reader.IsDbNull(ordinalIndex) Then
    Dim loadPC As String = reader.GetString(ordinalIndex)
    If Not String.IsNullOrWhiteSpace(loadPC) Then
        Load_Pc = Double.Parse(loadPC)
    End If 
End If

ここでTryParseアプローチ:

Double.TryParse(reader.GetString(ordinalIndex), Load_Pc)

ただし、可能であれば、常に正しい型を格納する必要があります。string/varchar数値やDateTime. そうすれば、より効率的でエラーが発生しにくくなります。

Dim Load_Pc As Double = reader.GetDouble(ordinalIndex)

Nullable(Of Double)代わりにa を使用する場合:

Dim Load_Pc As Double? = Nothing
Dim dLoad_Pc As Double
If Double.TryParse(reader.GetString(ordinalIndex), dLoad_Pc) Then
    Load_Pc = dLoad_Pc
End If
于 2013-10-16T13:19:59.290 に答える