Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur - Débordement SqlDateTime. Doit être compris entre le 01/01/1753 00:00:00 et le 31/12/9999 23:59:59

Un DateTime en C# est un type valeur, pas un type référence, et ne peut donc pas être null. Il peut cependant s'agir de la constante DateTime.MinValue qui est en dehors de la plage des serveurs SQL DATETIME Type de données.

Les types de valeur sont garantis d'avoir toujours une valeur (par défaut) (de zéro) sans avoir toujours besoin d'être explicitement définis (dans ce cas DateTime.MinValue).

La conclusion est que vous avez probablement une valeur DateTime non définie que vous essayez de transmettre à la base de données.

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

Concernant SQL Server

MSDN :Sql Server DateTime et SmallDateTime

Enfin, si vous vous retrouvez à passer un C# DateTime en tant que chaîne vers sql, vous devez la formater comme suit pour conserver une précision maximale et empêcher le serveur sql de générer une erreur similaire.

string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

Mise à jour (8 ans plus tard)

Pensez à utiliser le sql DateTime2 type de données qui s'aligne mieux avec le .net DateTime avec plage de dates 0001-01-01 through 9999-12-31 et plage horaire 00:00:00 through 23:59:59.9999999

string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

MSDN datetime2 (Transact-SQL)