Erreur - SqlDateTime overflow. Doit être entre 1/1/1753 12:00:00 AM et 31/12/9999 23:59:59 PM
j'ai une application écrite pour 2008.
Nous sommes à l'aide de linq to entities.
Nous avons eu à passer la DB pour 2005. J'obtiens l'erreur suivante sur linq requêtes SELECT:
Erreur SqlDateTime de débordement. Doit être entre 1/1/1753 12:00:00 AM et 12/31/9999 11:59:59 PM.
La ligne incriminée est:
DateOfBirth = ((s.Date_Of_Birth == null) || (s.Date_Of_Birth <= lowdate)) ?
DateTime.MinValue : s.Date_Of_Birth.Value,
DateOfBirth est de type DateTime et une propriété dans notre propre entreprise, objet (pas d'entité).
Ce que quelqu'un sait comment je peux modifier cette ligne pour faire de cette exécution de la requête?
source d'informationauteur bill
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que
lowdate
est au moins 1/1/1753.Si vous essayez de fournir une date antérieure à celle, EF vous convertir, et de la passer dans votre requête. En outre, vous ne devez pas utiliser
DateTime.MinValue
dans la requête, mais plutôt de ce que serait votre min:Rappelez-vous, avec l'EF, la requête sera compilé et converties en SQL sur le serveur, de sorte que les valeurs doivent tous être approprié.
Cela étant dit, je serais personnellement préfèrent stocker
DateOfBirth
commeDateTime?
(type nullable) au lieu d'utiliser une "valeur magique" (DateTime.MinValue
) de tenir la base de données de la valeur null ou des valeurs inappropriées.Aussi, juste pour ajouter à la bonne réponse, essayez d'utiliser SqlDateTime.MinValue au lieu de 1/1/1973 ou DateTime.MinValue.
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.minvalue.aspx
Bien sûr, c'est la même chose que 1/1/1973, mais c'est beaucoup plus propre et beaucoup moins magique.
Essayez d'utiliser
(DateTime)SqlDateTime.MinValue
à la place:Vous devez inclure:
Qui va prendre soin de la question si vous souhaitez utiliser une valeur non nulle du champ de date. Cependant, comme d'autres l'ont mentionné, il peut être préférable d'aller avec un champ de date null.
La
DateTime.MinValue
est équivalent à00:00:00.0000000, January 1, 0001
.Et DateTime de SQL 2005 est entre 1/1/1753 12:00:00 AM et 12/31/9999 11:59:59 P
Au lieu d'utiliser DateTime.MinValue, Vous devez créer un
et l'utiliser à la place DateTime.MinValue;
Cela se produit souvent lorsque vous essayez de conserver DateTime.MinValue SQL champ DateTime
Sûr, remplacer DateTime.MinValue avec "1/1/1753 12:00:00"
J'ai créé une extension de la fonction pour cela: