SqlDateTime overflow. Mora biti med 1.1.1753 ob 00:00:00 in 31.12.9999 ob 23:59:59
Ko sem izvajal posodobitev s spletne strani, sem ves čas dobival napako in mislil sem, da je kriva XML konfiguracija ali pa je šlo kaj narobe, ko se je SQL ukaz izvedel
Poskusil sem uporabiti SQL analizator poizvedb za pridobitev generiranih SQL stavkov in ugotovil, kje je težava s pravilnim izvajanjem? SQL izjava je naslednja:
izvršni sp_executesql N'VSTAVITI V dbo. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, leatedTime) VREDNOSTI (@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 overflow. Rešitev mora biti --- med 1. 1. 1753 ob 00:00 in 31. 12. 9999 ob 23:59
Vzrok napake
Če je vrednost vrste časa, ki se posreduje podatkovni bazi, NULL, ali pa je ob vstavljanju oziroma posodabljanju baze za DateTime.MinValue vrednost polja datetime privzeto ničelna. NULL se tukaj nanaša na null v programski kodi, in večina primerov, kjer se to zgodi, je: v programu je definirana časovna spremenljivka, ki se posreduje v bazo podatkov (ali shranjeno proceduro) brez dodelitve vrednosti. Trenutno je vrednost te spremenljivke privzeto dodeljena 01/01/01. Ker je v podatkovni bazi polje DateTime tip, je minimalna vrednost 1/1/1753 12:00:00, medtem ko je . NET Framework, tip DateTime, minimalna vrednost je 1/1/0001 0:00:00, seveda je izven minimalnega območja vrednosti sql, kar povzroči napako pri prelivanju podatkov. Poglejmo, kako videti .net in sql max minimalni čas preko C#:
Izhodni učinek:
Na koncu so ga popravljali več kot deset minut,
Zadnji vzroki napak so naslednji:
Ena od vrst atributov objekta je prav tako objekt, torej ima tabela tuji ključ, v tabelo tujih ključev pa se doda nov atribut datetime, ki nima dodeljene vrednosti in ni nastavljena na ničelni tip
Pri dodajanju ali posodabljanju objekta se datum in čas tujega ključa samodejno pripiše privzeti vrednosti, ker je čas privzete vrednosti .net krajši od privzetega minimalnega časa v bazi podatkov
Rešitev: Nastavite lastnost datumskega tipa tujega ključa na ničelni tip, pomagajte sodelavcem pri popolnem reševanju!
|