注意:此问题不仅仅与 Null 值有关,它更具体地与非双精度值相关,并通过读取器转换分配来处理它们。
在阅读器在 Convert... 上引发错误之前,寻找一种方法来检查此阅读器值中的空白或非双精度值。
Dim Load_Pc As Double = Convert.ToDouble(reader("Load_Pc"))
如果阅读器为空白或无法处理该值,是否有某种方法可以为 Load_Pc 分配任何内容?
注意:此问题不仅仅与 Null 值有关,它更具体地与非双精度值相关,并通过读取器转换分配来处理它们。
在阅读器在 Convert... 上引发错误之前,寻找一种方法来检查此阅读器值中的空白或非双精度值。
Dim Load_Pc As Double = Convert.ToDouble(reader("Load_Pc"))
如果阅读器为空白或无法处理该值,是否有某种方法可以为 Load_Pc 分配任何内容?
有了Double
,答案是否定的。
但是,对于 a Double?
,答案是肯定的。有关更多信息,请检查可空类型。
既然你说“空白”,我假设列的实际类型是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