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!
|