Nothing
signifie qu'un objet n'a pas été initialisé, DBNull
signifie que les données ne sont pas définies/manquantes. Il existe plusieurs façons de vérifier :
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
Le GetDateTime
La méthode est problématique car vous lui demandez de convertir une non-valeur en DateTime. Item()
renvoie un objet qui peut être testé facilement avant conversion.
' System Type
If System.DBNull.Value.Equals(...)
Vous pouvez également le DbReader. Cela ne fonctionne qu'avec l'index ordinal, pas un nom de colonne :
If myReader.IsDbNull(index) Then
Sur cette base, vous pouvez assembler des fonctions soit en tant que membres de classe partagés, soit retravaillées en extensions pour tester DBNull et renvoyer une valeur par défaut :
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
Utilisation :
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Pour un convertisseur DateTime, vous devez décider quoi renvoyer. Je préfère les faire individuellement.