Nothing
betyder, at et objekt ikke er blevet initialiseret, DBNull
betyder, at data ikke er defineret/mangler. Der er flere måder at kontrollere:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
metoden er problematisk, fordi du beder den om at konvertere en ikke-værdi til DateTime. Item()
returnerer Objekt, som nemt kan testes før konvertering.
' System Type
If System.DBNull.Value.Equals(...)
Du kan også DbReader. Dette virker kun med ordensindekset, ikke et kolonnenavn:
If myReader.IsDbNull(index) Then
Baseret på det kan du sammensætte funktioner enten som delte klassemedlemmer eller omarbejdet til udvidelser for at teste for DBNull og returnere en standardværdi:
Public Class SafeConvert
Public Shared Function ToInt32(Value As Object) As Integer
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt32(Value)
End If
End Function
Public Shared Function ToInt64(Value As Object) As Int64
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt64(Value)
End If
End Function
' etc
End Class
Brug:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
For en DateTime-konvertering skal du beslutte, hvad du vil returnere. Jeg foretrækker at gøre dem individuelt.