SqlDateTime overflow. Kell lennie 1753.01.01. 01:00:00 és 12/31.9999 23:59:59 között
Amikor a weboldalról végrehajtottam a frissítési műveletet, folyamatosan hibát kaptam, és azt hittem, az XML konfiguráció miatt van, vagy valami rosszul ment az SQL utasítás végrehajtása után
Próbáltam SQL lekérdezési analizátort használni, hogy megszerezzem a generált SQL utasításokat, és rájöttem, hogy mi a probléma a helyes végrehajtással? Az SQL állítás a következő:
A EXEC sp_executesql N'INSERT A DBO-ba. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, nowLeanAlarmType, InsertTime, TreatedTime) ÉRTÉKEK (@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. A határozatot 1753.01.01. 12:00:00 és 12/31 17999 óra 23:59:59:59 között kell ---
Hiba oka
Ha az adatbázisba továbbított időtípus értéke NULL, vagy amikor a DateTime.MinValue adatbázist illesztik vagy frissítik, akkor a datetime mező értéke alapértelmezetten null. A NULL itt a null-t jelenti a programkódban, és a legtöbb ilyen helyzet a programban egy időtípusú változót definiál, és érték hozzáadása nélkül továbbítják az adatbázisba (vagy tárolt eljáráshoz). Ekkor ennek a változónak az értéke alapértelmezetten 01/01/01 értéket kap. Mivel a DateTime típusmező az adatbázisban, a minimális érték 1/1/1753 12:00:00, míg . A NET keretrendszer, a DateTime típus, a minimális érték 1/1/0001 0:00:00, nyilvánvalóan kívül esik a sql érték minimális tartományán, ami adattúlterhelési hibát eredményez. Nézzük meg, hogyan lehet a .net és sql max minimum időt C#-on keresztül látni:
Kimeneti hatás:
Végül több mint tíz percig babrálták,
A végső hibaokok a következők:
Az objektum egyik attribútumtípusa szintén objektum, vagyis a táblának van egy idegen kulcsa, és egy új datetime attribútumot adnak hozzá az idegen kulcstáblához, amely nem kap értéket, és nem nullable típusra van állítva
Egy objektum hozzáadásakor vagy frissítésekor a külföldi kulcs objektum datetime automatikusan hozzárendeli az alapértelmezett értéket, mivel a .net alapértelmezett érték ideje kevesebb, mint az adatbázis alapértelmezett minimumideje
Megoldás: Állítsd be a idegen kulcs datetime típusának tulajdonságát nullable típusra, segíts kollégáknak tökéletesen megoldani!
|