2016-06-02 2 views
0

J'ai déclaré une propriété DateTime? NextUpdate Nullable dans mon modèle et ma base de données.Comment lire un DateTime nulllable en utilisant SQL Data Reader?

Je peux mettre à jour la valeur DateTime fine sur ma base de données car elle autorise null pour ce champ.

Mais lorsque je tente de obtenir la valeur de NextUpdate champ à partir de la base de données à l'aide de données SQL lecteur, il bombes parce que la valeur de NextUpdate est nulle.

J'ai essayé init la valeur NextUpdate si elle est nulle en utilisant l'affectation suivante, mais l'erreur est toujours jeté me disant ce champ est nul:

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

Erreur:

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

Question :

Existe-t-il une méthode courte de relecture et initialisation d'une valeur **DateTime?** nullable?

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() : "" 
     }; 
    } 
} 

propriété dans le modèle:

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

Êtes-vous sûr que votre '' IDataReader ont toujours une colonne nommée 'NextUpdate'? – Moumit

Répondre

1

Comparer la valeur contre DBNull.Value au lieu de null:

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

(en supposant que le membre NextUpdate est un DateTime?)

0

Essayez l'expression suivante:

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

NextUpdate est le DateTime? champ pas RootCause. –

+0

@Brian J exactement. –