Tengo un DateTime?
que intento insertar en un campo usando DbParameter
. Estoy creando el parámetro de este modo:C# ADO.NET: nulls y DbNull: ¿hay una sintaxis más eficiente?
DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
y luego quiero poner el valor de la DateTime?
en el dataPrm.Value
mientras que la contabilidad de null
s.
pensé inicialmente que sería inteligente:
datePrm.Value = nullableDate ?? DBNull.Value;
pero que falla con el error
operador '??' no se puede aplicar a operandos del tipo 'System.DateTime?' y 'System.DBNull'
Así que supongo que eso solo funciona si el segundo argumento es una versión que no admite nulos del primer argumento. Entonces me fui para:
datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
pero que no funciona bien:
Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'System.DateTime' y 'Sistema. DBNull '
Pero no quiero convertir entre esos tipos!
Hasta ahora la única cosa que puedo llegar al trabajo es:
if (nullableDate.HasValue)
datePrm.Value = nullableDate.Value;
else
datePrm.Value = DBNull.Value;
¿Es realmente la única forma que puede escribir esto? ¿Hay alguna manera de obtener un trazador de líneas utilizando el operador ternario para trabajar?
Actualización: Realmente no entiendo por qué el ?? la versión no funciona MSDN dice:
¿El ?? el operador devuelve el operando de la izquierda si no es nulo, o bien devuelve el operando derecho.
¡Eso es exactamente lo que quiero!
Update2: Bueno, era bastante obvio que al final:
datePrm.Value = nullableDate ?? (object)DBNull.Value;
http://stackoverflow.com/questions/1545711/is-it-possible-to-coalesce-string-and- dbnull-in-c – JohnB