2016-06-02 2 views
0

Ich habe eine NULL-fähige DateTime? NextUpdate Eigenschaft in meinem Modell und meiner Datenbank deklariert.Wie lies ich eine nullbare DateTime mit SQL Data Reader zurück?

Ich kann den DateTime-Wert in Ordnung auf meiner DB aktualisieren, da es Null für dieses Feld erlaubt.

Aber wenn ich versuche zu den Wert von NextUpdate Feld aus der Datenbank heraus mit SQL Data Reader es Bomben, weil der Wert von nextupdate null ist.

Ich habe versucht die nextupdate Wert init wenn es null ist, die folgende Zuordnung verwenden, aber der Fehler nach wie vor mich geworfen wird erzählt, dass Feld ist null:

NextUpdate = dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")) != null ? dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")) : DateTime.MinValue, 

Fehler:

Data is Null. This method or property cannot be called on Null values - at System.Data.SqlClient.SqlBuffer.get_DateTime() 

Frage :

Gibt es eine kurze Methode zum Zurücklesen und Initialisieren eines Nullwerts **DateTime?** Wert?

Code:

using (IDataReader dataReader = db.ExecuteReader(dbCommand)) 
{ 
    if (dataReader.Read()) 
    { 
     esc = new Escalation 
     { 
      NextUpdate = dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")), 
      RootCause = dataReader["RootCause"] != null ? dataReader["EM"].ToString() : "" 
     }; 
    } 
} 

Immobilien in Modell:

public DateTime? NextUpdate { get; set; } 
+0

Sind Sie sicher, dass Ihre '' IDataReader immer eine Spalte mit dem Namen 'NextUpdate'? – Moumit

Antwort

1

den Wert gegen DBNull.Value Vergleich statt null:

NextUpdate = dataReader["NextUpdate"].Equals(DBNull.Value) ? (DateTime?)null : (DateTime?)dataReader["NextUpdate"] 

(unter der Annahme, dass das NextUpdate Mitglied eine DateTime? ist)

0

Versuchen Ausdruck folgende:

RootCause = (dataReader["RootCause"] is DBNull) ? (DateTime?)null : (DateTime?)dataReader["RootCause"] ; 
+1

NextUpdate ist die DateTime? Feld nicht RootCause. –

+0

@ Brian J genau. –

Verwandte Themen