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