2012-02-01 20 views
11

Ho un oggetto datetime nullable in C#.Nullable DateTime and the Database

DateTime? StartDate = new DateTime(); 

Ho quindi controllare un valore inseriti dall'utente per determinare se una data è applicabile a questo record:

if (Complete == "N/A") 
{ 
    StartDate = null; 
} 

ora vengo alla mia domanda, che può o non può essere l'inserimento di un datetime nulla:

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = StartDate; 
} 

Come ci si aspetterebbe probabilmente se la data di inizio è nullo, viene visualizzato un errore indicante che il tipo non è corretto. Qual è il modo migliore per procedere da qui?

Ho considerato che il controllo della data di inizio è nullo ma non sono sicuro di come farlo quando il tipo è annullabile.

+1

Per inciso, si può facilmente controllare se un tipo nullable è nullo in due modi. 1) '! StartDate.HasValue', o 2) Semplicemente' StartDate == null' – Ray

risposta

18

questo passerà un valore NULL database come parametro se StartDate è nullo:

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = (object)StartDate ?? DBNull.Value; 
} 
+0

Questo è quello che stavo tentando, non sapevo però di questa sintassi stenografica! :) – deed02392

+0

Errore anche con questo: Operatore '??' non può essere applicato agli operandi di tipo system.datetime? e system.dbnull. – deed02392

+0

@ deed02392 corretto con un cast semplice per l'oggetto –

1
using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    if (StartDate.HasValue()) 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = StartDate; 
    else 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = DBNull.Value; 
}