我倾向于使用
If Not IsDBNull(dr("data")) Then
myData = dr("data")
End If
捕获空值。有没有更好的办法?好像我一遍又一遍地使用它?任何人都写一个函数来检查这个像
这样的东西mydata = IfNotNull("data")
我不知道如何处理可以返回的不同数据类型。 谢谢你的任何想法!
答案 0 :(得分:4)
在我的CLR对象为Nullable的情况下,当我使用VB.NET时,我使用了这种扩展方法:
Private Function GetNullable(Of T As Structure)(ByVal row As System.Data.DataRow, ByVal fieldname As String, ByVal convert As Conversion(Of T)) As Nullable(Of T)
Dim nullable As Nullable(Of T)
If System.Convert.IsDBNull(row(fieldname)) Then
nullable = Nothing
Else
nullable = convert(row, fieldname)
End If
Return nullable
End Function
使用Conversion(Of T)
的以下代理:
Private Delegate Function Conversion(Of T)(ByVal row As System.Data.DataRow, ByVal fieldname As String) As T
然后我对相关数据类型的扩展进行分层:
<Extension()> _
Public Function GetDouble(ByVal row As System.Data.DataRow, ByVal name As String) As Double
Return Convert.ToDouble(row(name))
End Function
<Extension()> _
Public Function GetNullableDouble(ByVal row As System.Data.DataRow, ByVal name As String) As System.Nullable(Of Double)
Return GetNullable(Of Double)(row, name, AddressOf GetDouble)
End Function
最后,我可以使用:
Dim amount As Double? = dr.GetNullableDouble("amount")