SqlDateTime pretečenie. Musí to byť medzi 1.1.1753 00:00:00 a 31.12.9999 o 23:59:59
Pri vykonávaní aktualizačnej operácie z webu som stále dostával chybu a myslel som si, že je to XML konfigurácia alebo sa niečo pokazilo pri vykonaní SQL príkazu
Skúsil som použiť SQL query analyzer na získanie generovaných SQL príkazov a zistil som, aký je problém so správnym vykonávaním? SQL príkaz je nasledovný:
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 pretečenie. Riešenie musí byť --- medzi 1.1.1753 o 00:00:00 a 31.12.9999 do 23:59:59
Príčina chyby
Ak je hodnota časového typu odovzdaného databáze NULL, alebo pri vkladaní či aktualizácii databázy na DateTime.MinValue, hodnota poľa datetime je predvolene null. NULL tu označuje null v programovom kóde a väčšina scenárov, kde sa to stane, je: v programe je definovaná premenná typu času, ktorá sa odovzdá databáze (alebo uloženej procedúre) bez priradenia hodnoty. V tomto momente je hodnota tejto premennej predvolene priradená 01/01/01. Keďže pole typu DateTime v databáze je minimálna hodnota 1/1/1753 12:00:00, zatiaľ čo . NET Framework, typ DateTime, minimálna hodnota je 1/1/0001 0:00:00, samozrejme, je mimo minimálneho rozsahu hodnoty sql, čo vedie k chybe pretečenia dát. Pozrime sa, ako vidieť .net a sql max minimálny čas cez C#:
Výstupný efekt:
Nakoniec sa na ňom pracovalo viac ako desať minút,
Konečné príčiny chýb sú nasledovné:
Jedným z typov atribútov objektu je zároveň objekt, teda tabuľka má cudzí kľúč a do tabuľky cudzích kľúčov sa pridá nový atribút datetime, ktorý nemá priradenú hodnotu a nie je nastavený na nulovateľný typ
Pri pridávaní alebo aktualizácii objektu sa dátumový čas cudzieho kľúčového objektu automaticky priradí k predvolenej hodnote, pretože čas predvolenej hodnoty .net je menší ako predvolený minimálny čas databázy
Riešenie: Nastavte vlastnosť typu datetime objektu cudzieho kľúča na nullable typ, pomôžte kolegom to dokonale vyriešiť!
|