Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehler – SqlDateTime-Überlauf. Muss zwischen dem 1.1.1753 00:00:00 und dem 31.12.9999 23:59:59 liegen

Eine DateTime in C# ist ein Werttyp, kein Referenztyp und kann daher nicht null sein. Es kann aber auch die Konstante DateTime.MinValue sein die außerhalb des Bereichs von Sql Servers DATETIME liegt Datentyp.

Werttypen haben garantiert immer einen (Standard-)Wert (von Null), ohne dass sie immer explizit gesetzt werden müssen (in diesem Fall DateTime.MinValue).

Die Schlussfolgerung ist, dass Sie wahrscheinlich einen nicht festgelegten DateTime-Wert haben, den Sie an die Datenbank weitergeben möchten.

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

Bezüglich Sql Server

MSDN:Sql Server DateTime und SmallDateTime

Schließlich, wenn Sie feststellen, dass Sie ein C# DateTime übergeben als Zeichenfolge in SQL müssen Sie sie wie folgt formatieren, um die maximale Genauigkeit beizubehalten und zu verhindern, dass der SQL-Server einen ähnlichen Fehler ausgibt.

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

Update (8 Jahre später)

Erwägen Sie die Verwendung von SQL DateTime2 Datentyp, der besser zu .net DateTime passt mit Datumsbereich 0001-01-01 through 9999-12-31 und Zeitbereich 00:00:00 through 23:59:59.9999999

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

MSDN datetime2 (Transact-SQL)