A 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 del DATETIME
tipo de datos de Sql Servers .
Se garantiza que los tipos de valor siempre tendrán un valor (predeterminado) (de cero) sin necesidad de establecer siempre explícitamente (en este caso, DateTime.MinValue).
La conclusión es que probablemente tenga un valor DateTime no establecido que está intentando 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
Respecto al servidor SQL
datetime
Datos de fecha y hora desde el 1 de enero de 1753 hasta el 31 de diciembre de 9999, con una precisión de tres centésimas de segundo (equivalente a 3,33 milisegundos o 0,00333 segundos). Los valores se redondean a incrementos de .000, .003 o .007 segundos
smalldatetime
Datos de fecha y hora desde el 1 de enero de 1900 hasta el 6 de junio de 2079, con precisión al minuto. los valores de smalldatetime con 29,998 segundos o menos se redondean al minuto más cercano; los valores con 29,999 segundos o más se redondean al minuto más cercano.
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 mantener 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 DateTime2
tipo de datos sql que se alinea mejor con el .net DateTime
con rango de fecha 0001-01-01 through 9999-12-31
y rango de tiempo00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Transact-SQL)