sql >> Database >  >> RDS >> Oracle

Hoe te controleren of de DataReader-waarde niet null is?

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.



  1. Hoe het schema van een object (tabel, weergave, opgeslagen procedure) in SQL Server-database te wijzigen - SQL Server / TSQL-zelfstudie, deel 28

  2. Hoe cbrt() werkt in PostgreSQL

  3. Schakel root-aanmelding uit in phpMyAdmin

  4. Waarom krijg ik OutOfRange Exception in GetOrdinal Function van dit CLOB-veld?