Nothing
betekent dat een object niet is geïnitialiseerd, DBNull
betekent dat de gegevens niet zijn gedefinieerd/ontbreken. Er zijn verschillende manieren om te controleren:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
De GetDateTime
methode is problematisch omdat u deze vraagt om een niet-waarde naar DateTime te converteren. Item()
retourneert Object dat gemakkelijk voor kan worden getest converteren.
' System Type
If System.DBNull.Value.Equals(...)
U kunt ook de DbReader. Dit werkt alleen met de ordinale index, niet met een kolomnaam:
If myReader.IsDbNull(index) Then
Op basis daarvan kun je functies samenstellen als Shared-klasseleden of herwerkt in Extensies om te testen op DBNull en een standaardwaarde te retourneren:
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
Gebruik:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Voor een DateTime-converter moet u beslissen wat u wilt retourneren. Ik doe die liever individueel.