Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 22966|Atbildi: 1

[Avots] spring.net nhibernate sqldatetime pārpildes risinājums

[Kopēt saiti]
Publicēts 13.09.2017 14:34:58 | | | |
SqlDateTime pārpilde. Jābūt no 1/1/1753 12:00:00 AM līdz 12/31/9999 11:59:59 PM




Veicot atjaunināšanas darbību no vietnes, es turpināju saņemt kļūdu, un es domāju, ka tā bija XML konfigurācija vai kaut kas nogāja greizi, kad SQL priekšraksts tika izpildīts

Es mēģināju izmantot SQL vaicājumu analizatoru, lai satvertu ģenerētos SQL paziņojumus, un atklāju, ka kāda ir problēma ar pareizu izpildi? SQL priekšraksts ir šāds:

exec sp_executesql N'INSERT INTO dbo. LeanLogs (versija, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) VĒRTĪBAS (@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ārpilde. Rezolūcija ir --- laikā no 1/1/1753 12:00:00 AM līdz 12/31/9999 11:59:59 PM

Kļūdas cēlonis

    Ja datu bāzei nodotā laika tipa vērtība ir NULL vai ievietojot vai atjauninot datu bāzi DateTime.MinValue, lauka datetime vērtība pēc noklusējuma ir nulle.
    NULL šeit attiecas uz null programmas kodā, un lielākā daļa scenāriju, kad tas notiek, ir: programmā ir definēts laika tipa mainīgais, un tas tiek nodots datu bāzei (vai saglabātajai procedūrai), nepiešķirot vērtību. Šobrīd šī mainīgā vērtība pēc noklusējuma tiek piešķirta 01/01/01.
     Tā kā datu bāzes lauks DateTime tips minimālā vērtība ir 1/1/1753 12:00:00, bet . NET Framework, DateTime tips, minimālā vērtība ir 1/1/0001 0:00:00, acīmredzot tā ir ārpus sql vērtības minimālo vērtību diapazona, kā rezultātā rodas datu pārpildes kļūda.
    Apskatīsim, kā redzēt .net un sql maksimālo minimālo laiku, izmantojot C#:


Izejas efekts:



Galu galā tas tika apstrādāts vairāk nekā desmit minūtes,

Pēdējie kļūdu cēloņi ir šādi:

Viens no objekta atribūtu tipiem ir arī objekts, tas ir, tabulai ir ārējā atslēga, un ārējās atslēgas tabulai tiek pievienots jauns datuma un laika atribūts, kuram nav piešķirta vērtība un nav iestatīts nullējams tips

Pievienojot vai atjauninot objektu, ārējās atslēgas objekta datetime tiek automātiski pievienots noklusējuma vērtībai, jo .net noklusējuma vērtības laiks ir mazāks par datu bāzes noklusējuma minimālo laiku

Risinājums: Iestatiet ārējās atslēgas objekta datetime tipa rekvizītu uz nullable tipu, palīdziet kolēģiem to perfekti atrisināt!







Iepriekšējo:.net/c# operācija redis kešatmiņas pievienošana, dzēšana, modificēšana un vaicājums [avota kods]
Nākamo:asp.net Mājas lapas anomāliju kļūdu analīze
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com