Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment vérifier si la valeur DataReader n'est pas nulle ?

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.