sql >> Databáze >  >> RDS >> Oracle

Jak zkontrolovat, zda hodnota DataReaderu není null?

Nothing znamená, že objekt nebyl inicializován, DBNull znamená, že data nejsou definována/chybí. Existuje několik způsobů kontroly:

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

GetDateTime metoda je problematická, protože ji žádáte o převod jiné hodnoty na DateTime. Item() vrací Objekt, který lze snadno otestovat před konverze.

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

Můžete také DbReader. Toto funguje pouze s pořadovým indexem, nikoli s názvem sloupce:

If myReader.IsDbNull(index) Then 

Na základě toho můžete dát dohromady funkce buď jako sdílené členy třídy, nebo přepracované do Extensions, abyste otestovali DBNull a vrátili výchozí hodnotu:

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

Použití:

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

U převodníku DateTime byste se museli rozhodnout, co vrátit. Raději je dělám individuálně.



  1. Kód entitního rámce je pomalý při použití Include() mnohokrát

  2. Nasazení MySQL Galera Cluster 4.0 na Amazon AWS EC2

  3. SQL řádky do sloupců

  4. RoR:Nelze změnit_sloupec v postgresu, v pořádku v MySQL (MySQL pro vývoj, Postgres na Heroku)