Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore:overflow di SqlDateTime. Deve essere compreso tra il 01/01/1753 00:00:00 e il 31/12/9999 23:59:59

Un DateTime in C# è un tipo di valore, non un tipo di riferimento e pertanto non può essere null. Può tuttavia essere la costante DateTime.MinValue che è al di fuori dell'intervallo di SQL Server DATETIME tipo di dati.

È garantito che i tipi di valore abbiano sempre un valore (predefinito) (di zero) senza che sia sempre necessario impostarli in modo esplicito (in questo caso DateTime.MinValue).

La conclusione è che probabilmente hai un valore DateTime non impostato che stai cercando di passare al database.

DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999, 
                    exactly one 100-nanosecond tick 
                    before 00:00:00, January 1, 10000

MSDN:DateTime.MinValue

Per quanto riguarda SQL Server

MSDN:Sql Server DateTime e SmallDateTime

Infine, se ti ritrovi a passare un C# DateTime come stringa in sql, è necessario formattarla come segue per mantenere la massima precisione e per evitare che il server sql generi un errore simile.

string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

Aggiornamento (8 anni dopo)

Prendi in considerazione l'utilizzo di sql DateTime2 tipo di dati che si allinea meglio con .net DateTime con intervallo di date da 0001-01-01 through 9999-12-31 e intervallo di tempo 00:00:00 through 23:59:59.9999999

string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

MSDN datetime2 (Transact-SQL)