Nothing
significa che un oggetto non è stato inizializzato, DBNull
significa che i dati non sono definiti/mancanti. Esistono diversi modi per verificare:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
Il GetDateTime
il metodo è problematico perché gli stai chiedendo di convertire un valore non in DateTime. Item()
restituisce Oggetto che può essere testato facilmente prima conversione.
' System Type
If System.DBNull.Value.Equals(...)
Puoi anche il DbReader. Funziona solo con l'indice ordinale, non con il nome di una colonna:
If myReader.IsDbNull(index) Then
Sulla base di ciò, puoi mettere insieme funzioni come membri di una classe condivisa o rielaborate in estensioni per testare DBNull e restituire un valore predefinito:
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
Utilizzo:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Per un convertitore DateTime, dovresti decidere cosa restituire. Preferisco farli individualmente.