我倾向于使用If Not IsDBNull(dr(“data”))然后......从数据读取器读取是否有更好的方法?

时间:2010-09-07 18:18:03

标签: vb.net sqldatareader

我倾向于使用

If Not IsDBNull(dr("data")) Then
     myData = dr("data")
End If

捕获空值。有没有更好的办法?好像我一遍又一遍地使用它?任何人都写一个函数来检查这个像

这样的东西
mydata = IfNotNull("data")

我不知道如何处理可以返回的不同数据类型。 谢谢你的任何想法!

1 个答案:

答案 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")