sql >> Base de Datos >  >> RDS >> Sqlserver

Error:desbordamiento de SqlDateTime. Debe ser entre el 1/1/1753 00:00:00 y el 31/12/9999 23:59:59

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");

MSDN datetime2 (Transact-SQL)