Nothing
betyder att ett objekt inte har initierats, DBNull
betyder att data inte är definierad/saknad. Det finns flera sätt att kontrollera:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
Metoden är problematisk eftersom du ber den att konvertera ett icke-värde till DateTime. Item()
returnerar objekt som enkelt kan testas före konvertera.
' System Type
If System.DBNull.Value.Equals(...)
Du kan också DbReader. Detta fungerar bara med ordningsindex, inte ett kolumnnamn:
If myReader.IsDbNull(index) Then
Baserat på det kan du sätta ihop funktioner antingen som delade klassmedlemmar eller omarbetade till Extensions för att testa för DBNull och returnera ett standardvärde:
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
Användning:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
För en DateTime-konverterare måste du bestämma vad du ska returnera. Jag föredrar att göra dem individuellt.