SqlDateTime ületäitumine. Peab toimuma ajavahemikus 1.01.1753 kell 00:00:00 kuni 31.12.9999 kell 23:59:59
Kui tegin veebilehelt uuendusoperatsiooni, sain pidevalt veateate ja arvasin, et probleem on XML-konfiguratsioonis või midagi läks valesti, kui SQL lause käivitati
Proovisin kasutada SQL päringuanalüsaatorit, et genereeritud SQL-lauseid haarata, ja leidsin, mis on õige täitmisega probleem? SQL-lause on järgmine:
Täitja sp_executesql N'INSERT DBO-sse. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, nowLeanAlarmType, InsertTime, TreatedTime) VÄÄRTUSED (@p0, @p1, @p2, @p3, @p4, @p5, @p6); select SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 datetime,@p6 datetime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL SqlDateTime ületäitumine. Resolutsioon peab olema --- ajavahemikus 1/1/1753 kell 00:00:00 kuni 31.12.9999 kell 23:59:59
Vea põhjus
Kui andmebaasile edastatud ajatüübi väärtus on NULL või DateTime.MinValue andmebaasi lisamisel või uuendamisel on datetime välja väärtus vaikimisi null. NULL viitab siin nullile programmi koodis ning enamik olukordi, kus see juhtub, on näiteks: programmis defineeritakse ajatüüpi muutuja ja see edastatakse andmebaasi (või salvestatud protseduuri) ilma väärtust määramata. Sel hetkel määratakse selle muutuja väärtus vaikimisi 01/01/01. Kuna andmebaasis on DateTime tüübi väli, on minimaalne väärtus 1/1/1753 12:00:00, samas kui . NET raamistik, DateTime tüüp, minimaalne väärtus on 1/1/0001 0:00:00, ilmselgelt jääb see SQL väärtuse miinimumvahemikust välja, mis põhjustab andmete ülevoolu vea. Vaatame, kuidas näha .net ja sql max min-aega C# kaudu:
Väljundefekt:
Lõpuks nokitseti seda üle kümne minuti,
Lõplikud vea põhjused on järgmised:
Üks objekti atribuuditüüpidest on samuti objekt, st tabelil on võõrvõti ning võõrvõtme tabelisse lisatakse uus datetime atribuut, millele ei määrata väärtust ega nullitavat tüüpi
Objekti lisamisel või uuendamisel lisatakse võõrvõtme objekti datetime automaatselt vaikimisi väärtusele, kuna .net vaikeväärtuse aeg on väiksem kui andmebaasi vaikimisi minimaalne aeg
Lahendus: Sea võõrvõtme objekti datetime tüübi omadus nullitavaks tüübiks, aita kolleegidel see täiuslikult lahendada!
|