2012-02-01 12 views
11

Tengo un objeto de fecha y hora anulable en C#.Nullable DateTime y la base de datos

DateTime? StartDate = new DateTime(); 

entonces puedo comprobar un valor enviado por el usuario para determinar si una fecha es aplicable a este registro:

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

Ahora me vienen a mi consulta, que puede o no ser la inserción de una fecha y hora nulo:

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

Como es de esperar que la fecha de inicio sea nula, me sale un error que indica que el tipo no es correcto. ¿Cuál es la mejor manera de proceder desde aquí?

Considero que verificar la fecha de inicio es nulo, pero no estoy seguro de cómo hacerlo cuando el tipo sea anulable.

+1

Como acotación al margen, se puede comprobar fácilmente si un tipo anulable es nulo de dos maneras. 1) '! StartDate.HasValue', o 2) Simplemente' StartDate == null' – Ray

Respuesta

18

Esto pasará un valor NULL base de datos como si el parámetro StartDate es nulo:

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

Esto es lo que estaba intentando, ¡aunque no conocía esta sintaxis abreviada! :) – deed02392

+0

Error con esto también: operador '??' no se puede aplicar a operandos de tipo system.datetime? y system.dbnull. – deed02392

+0

@ deed02392 arreglado con un simple elenco al objeto –

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; 
} 
Cuestiones relacionadas