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!
|