SqlDateTime přetečení. Musí to být mezi 1.1.1753 00:00:00 a 31.12.9999 ve 23:59:59
Při provádění aktualizace z webu jsem pořád dostával chybu a myslel jsem si, že je to XML konfigurace, nebo že se něco pokazilo při spuštění SQL příkazu
Zkusil jsem použít SQL query analyzer k získání generovaných SQL příkazů a zjistil jsem, že v čem je problém se správným vykonáním? SQL příkaz je následující:
exec sp_executesql N'INSERT do dbo. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, leatedTime) HODNOTY (@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 přetečení. Usnesení musí být --- mezi 1. 1. 1753 v 00:00 a 31. 12. 19999 do 23:59
Příčina chyby
Pokud je hodnota časového typu předaného databázi NULL, nebo při vkládání či aktualizaci databáze pro DateTime.MinValue, je hodnota pole datetime ve výchozím nastavení null. NULL zde označuje null v programovém kódu a většina situací, kdy k tomu dochází, je: v programu je definována proměnná typu časového typu a je předána do databáze (nebo uložené procedury) bez přiřazení hodnoty. V tuto chvíli je hodnota této proměnné ve výchozím nastavení přiřazena 01/01/01. Protože pole typu DateTime v databázi je minimální hodnota 1/1/1753 12:00:00, zatímco . NET Framework, typ DateTime, minimální hodnota je 1/1/0001 0:00:00, samozřejmě je mimo minimální rozsah hodnoty sql, což vede k chybě přetečení dat. Podívejme se, jak vidět .net a sql max minimální čas přes C#:
Výstupní efekt:
Nakonec se na něm pracovalo více než deset minut,
Konečné příčiny chyb jsou následující:
Jedním z typů atributů objektu je také objekt, tedy tabulka má cizí klíč a do tabulky cizích klíčů je přidán nový atribut datetime, který nemá přiřazenou hodnotu a není nastaven na nulovatelný typ
Při přidávání nebo aktualizaci objektu je datum okamžiku cizího klíče automaticky přiřazeno k výchozí hodnotě, protože čas výchozí hodnoty .net je menší než výchozí minimální čas databáze
Řešení: Nastavte vlastnost typu datetime objektu cizího klíče na nullable type, pomozte kolegům ji vyřešit dokonale!
|