0

注意:此问题不仅仅与 Null 值有关,它更具体地与非双精度值相关,并通过读取器转换分配来处理它们。

在阅读器在 Convert... 上引发错误之前,寻找一种方法来检查此阅读器值中的空白或非双精度值。

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

如果阅读器为空白或无法处理该值,是否有某种方法可以为 Load_Pc 分配任何内容?

4

2 回答 2

1

有了Double,答案是否定的。

但是,对于 a Double?,答案是肯定的。有关更多信息,请检查可空类型

于 2013-10-16T13:18:08.213 回答
1

既然你说“空白”,我假设列的实际类型是string.

然后您可以使用Double.TryParse或检查它是否为空或为空

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)

如果你想使用 aNullable(Of Double)代替:

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 回答