sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo verificar si el valor de DataReader no es nulo?

Nothing significa que un objeto no ha sido inicializado, DBNull significa que los datos no están definidos/faltan. Hay varias formas de verificar:

' The VB Function
If IsDBNull(Reader.Item(0)) Then...

El GetDateTime El método es problemático porque le está pidiendo que convierta un valor no a DateTime. Item() devuelve un objeto que se puede probar fácilmente antes conversión.

 ' System Type
 If System.DBNull.Value.Equals(...)

También puede utilizar el DbReader. Esto solo funciona con el índice ordinal, no con un nombre de columna:

If myReader.IsDbNull(index) Then 

En base a eso, puede juntar funciones como miembros de clase compartida o volver a trabajar en Extensiones para probar DBNull y devolver un valor predeterminado:

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

Uso:

myDate = SafeConvert.ToDateTime(Reader.Item(0))

Para un convertidor DateTime, tendría que decidir qué devolver. Prefiero hacerlo individualmente.