Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 22966|Vastaus: 1

[Lähde] spring.net nhibernate sqldatetime overflow solution

[Kopioi linkki]
Julkaistu 13.9.2017 14.34.58 | | | |
SqlDateTime ylivuoto. Tulee olla 1.1.1753 klo 00:00:00 ja 31.12.9999 klo 23:59:59 välillä




Kun tein päivitysoperaatiota verkkosivustolta, sain jatkuvasti virheen, ja luulin sen johtuvan XML-konfiguraatiosta tai että jokin meni pieleen, kun SQL-lause suoritettiin

Yritin käyttää SQL-kyselyanalysaattoria saadakseni generoidut SQL-lauseet ja huomasin, mikä on oikean suorituksen ongelma? SQL-lause on seuraava:

Exec sp_executesql N'INSERT dbo:hon. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, nowLeanAlarmType, InsertTime, TreatedTime) ARVOT (@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 ylivuoto. Ratkaisu on --- 1.1.1753 klo 00:00:00 ja 31.12.9999 klo 23:59:59 välillä

Virheen syy

    Jos tietokantaan välitetyn aikatyypin arvo on NULL, tai kun lisäät tai päivitetään tietokantaa DateTime.MinValuelle, datetime-kentän arvo on oletuksena nolla.
    NULL viittaa tässä nollaan ohjelmakoodissa, ja useimmat tilanteet, joissa näin tapahtuu, ovat: aikatyyppinen muuttuja määritellään ohjelmassa, joka välitetään tietokannalle (tai tallennettuun proseduuriin) ilman arvoa. Tällä hetkellä tämän muuttujan arvo on oletuksena määritelty 01.01.01.
     Koska tietokannassa on DateTime-tyyppikenttä, minimiarvo on 1/1/1753 12:00:00, kun taas . NET-kehys, DateTime-tyyppi, minimiarvo on 1/1/0001 0:00:00, mikä on selvästi neliöarvon minimialueen ulkopuolella, mikä johtaa datan ylivuotovirheeseen.
    Katsotaanpa, miten nähdään .net- ja sql-maksimiminimi C#:n kautta:


Tulosvaikutus:



Lopulta sitä viriteltiin yli kymmenen minuuttia,

Lopulliset virheen syyt ovat seuraavat:

Yksi objektin attribuutityypeistä on myös objekti, eli taululla on vierasavain, ja vierasavaintaulukkoon lisätään uusi datetime-attribuutti, jolle ei ole annettu arvoa eikä asetettu nollattuun tyyppiin

Kun objektia lisätään tai päivitetään, vierasavaimen objektin datetime liitetään automaattisesti oletusarvoon, koska .net-oletusarvon aika on pienempi kuin tietokannan oletusminimiaika

Ratkaisu: Aseta vierasavaimen datetime-tyypin ominaisuus nollattaviksi, auta kollegoita ratkaisemaan se täydellisesti!







Edellinen:.net/c#-operaatio Redis Välimuistin lisääminen, poisto, muokkaus ja kysely [lähdekoodi]
Seuraava:asp.net Verkkosivuston poikkeamavirheanalyysi
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com