See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 22966|Vastuse: 1

[Allikas] spring.net nhibernate sqldatetime overflow lahendus

[Kopeeri link]
Postitatud 13.09.2017 14:34:58 | | | |
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!







Eelmine:.net/c# operatsioon Redis vahemälu lisamine, kustutamine, muutmine ja päring [lähtekood]
Järgmine:asp.net Veebisaidi anomaalia veaanalüüs
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com