Un DateTime
en C# es un tipo de valor, no un tipo de referencia y, por lo tanto, no puede ser nulo. Sin embargo, puede ser la constante DateTime.MinValue
que está fuera del rango de servidores Sql DATETIME
tipo de datos.
Se garantiza que los tipos de valor siempre tendrán un valor (predeterminado) (de cero) sin necesidad de establecerlos explícitamente (en este caso, DateTime.MinValue).
La conclusión es que probablemente tenga un valor DateTime no establecido que está tratando de pasar a la base de datos.
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999,
exactly one 100-nanosecond tick
before 00:00:00, January 1, 10000
MSDN:DateTime.MinValue
Con respecto al servidor Sql
MSDN:Sql Server DateTime y SmallDateTime
Por último, si se encuentra pasando un C# DateTime
como una cadena a sql, debe formatearlo de la siguiente manera para conservar la máxima precisión y evitar que el servidor sql arroje un error similar.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Actualización (8 años después)
Considere usar el sql DateTime2
tipo de datos que se alinea mejor con .net DateTime
con intervalo de fechas 0001-01-01 through 9999-12-31
y rango de tiempo 00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");