Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 22966|Atsakyti: 1

[Šaltinis] spring.net nhibernate sqldatetime perpildymo sprendimas

[Kopijuoti nuorodą]
Paskelbta 2017-09-13 14:34:58 | | | |
SqlDateTime perpilda. Turi būti nuo 1753-01-01 12:00:00 iki 9999-12-31 23:59:59




Atlikdamas atnaujinimo operaciją iš svetainės, nuolat gaudavau klaidą ir maniau, kad tai buvo XML konfigūracija arba kažkas negerai, kai buvo vykdomas SQL sakinys

Bandžiau naudoti SQL užklausų analizatorių, kad paimčiau sugeneruotus SQL sakinius, ir pastebėjau, kad kokia yra teisingo vykdymo problema? SQL sakinys yra toks:

exec sp_executesql N'INSERT INTO dbo. "LeanLogs" (versija, "OrganizationId", "CustomInfoId", "LastLeanAlarmType", "NowLeanAlarmType", "InsertTime", "TreatedTime") REIKŠMĖS (@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 perpilda. Rezoliucija turi būti --- nuo 1753-01-01 12:00:00 iki 9999-12-31 23:59:59

Klaidos priežastis

    Jei duomenų bazei perduoto laiko tipo reikšmė yra NULL arba įterpiant arba atnaujinant duomenų bazę DateTime.MinValue, pagal numatytuosius nustatymus lauko datetime reikšmė yra neapibrėžta.
    NULL čia reiškia nulį programos kode, ir dauguma scenarijų, kai tai atsitinka, yra šie: programoje apibrėžiamas laiko tipo kintamasis ir jis perduodamas į duomenų bazę (arba saugomą procedūrą) nepriskiriant reikšmės. Šiuo metu šio kintamojo reikšmė pagal numatytuosius nustatymus priskiriama 01/01/01.
     Kadangi duomenų bazės lauke DateTime tipas minimali reikšmė yra 1/1/1753 12:00:00, o . NET Framework, DateTime tipas, minimali reikšmė yra 1/1/0001 0:00:00, akivaizdu, kad ji nepatenka į minimalų sql reikšmės diapazoną, todėl atsiranda duomenų perpildymo klaida.
    Pažvelkime, kaip pamatyti .net ir sql maksimalų minimalų laiką per C#:


Išvesties efektas:



Galų gale, jis buvo tinkered daugiau nei dešimt minučių,

Galutinės klaidos priežastys yra šios:

Vienas iš objekto atributų tipų taip pat yra objektas, tai yra, lentelė turi išorinį raktą, o į išorinio rakto lentelę pridedamas naujas datetime atributas, kuriam nepriskirta reikšmė ir nenustatytas nulinis tipas

Įtraukiant arba atnaujinant objektą, išorinio rakto objekto datetime automatiškai pridedamas prie numatytosios reikšmės, nes .net numatytosios reikšmės laikas yra mažesnis už numatytąjį minimalų duomenų bazės laiką

Sprendimas: Nustatykite išorinio rakto objekto datetime tipo ypatybę į nulinį tipą, padėkite kolegoms ją puikiai išspręsti!







Ankstesnis:.net/c# operacija redis talpyklos papildymas, ištrynimas, modifikavimas ir užklausa [šaltinio kodas]
Kitą:asp.net Svetainės anomalijų klaidų analizė
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com