Eccesso di SqlDateTime. Deve essere tra il 1/1/1753 00:00:00 e il 31/12/9999 11:59:59
Durante l'operazione di aggiornamento dal sito, continuavo a ricevere un errore e pensavo fosse la configurazione XML o che qualcosa fosse andato storto quando l'istruzione SQL veniva eseguita
Ho provato a usare l'analizzatore di query SQL per recuperare le istruzioni SQL generate e ho scoperto che qual è il problema con l'esecuzione corretta? La dichiarazione SQL è la seguente:
executive sp_executesql N'INSERT IN dbo. LeanLogs (Versione, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) VALORI (@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 Eccesso di SqlDateTime. Una risoluzione deve essere --- tra il 1/1/1753 00:00:00 e il 31/12/9999 23:59:59
Causa di errore
Se il valore del tipo di tempo passato al database è NULL, oppure quando si inserisce o si aggiorna il database per DateTime.MinValue, il valore del campo datatime è nullo di default. NULL qui si riferisce a null nel codice del programma, e la maggior parte degli scenari in cui ciò accade sono: una variabile di tipo temporale viene definita nel programma e viene passata al database (o alla procedura memorizzata) senza assegnare un valore. Al momento, il valore di questa variabile viene assegnato di default 01/01/01. Poiché il campo di tipo DateTime nel database, il valore minimo è 1/1/1753 12:00:00, mentre il . NET Framework, il tipo DateTime, il valore minimo è 1/1/0001 0:00:00, ovviamente è fuori dall'intervallo minimo del valore SQL, causando un errore di overflow dei dati. Diamo un'occhiata a come vedere .net e sql max tempo minimo tramite C#:
Effetto di output:
Alla fine, fu ristrutturato per più di dieci minuti,
Le cause finali di errore sono le seguenti:
Uno dei tipi di attributo dell'oggetto è anch'esso un oggetto, cioè la tabella ha una chiave estranea, e un nuovo attributo datetime viene aggiunto alla tabella della chiave esterna, che non ha un valore assegnato e non è impostato come tipo nullable
Quando si aggiunge o si aggiorna un oggetto, la data-ora dell'oggetto chiave esterna viene automaticamente associata al valore predefinito, perché il tempo del valore predefinito .net è inferiore al tempo minimo predefinito del database
Soluzione: imposta la proprietà di un tipo datatime dell'oggetto chiave esterna su nullable type, aiuta i colleghi a risolverla perfettamente!
|