A DateTime
in C # ist ein Werttyp, kein Referenztyp und kann daher nicht null sein. DateTime.MinValue
Dies kann jedoch die Konstante sein, die außerhalb des Bereichs des Datentyps SQL Server liegt DATETIME
.
Werttypen haben garantiert immer einen (Standard-) Wert (von Null), ohne dass dies immer explizit festgelegt werden muss (in diesem Fall DateTime.MinValue).
Schlussfolgerung ist, dass Sie wahrscheinlich einen nicht festgelegten DateTime-Wert haben, den Sie an die Datenbank übergeben 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
In Bezug auf SQL Server
datetime Datums-
und Uhrzeitdaten vom 1. Januar 1753 bis zum 31. Dezember 9999 mit einer Genauigkeit von einer Dreihundertstelsekunde (entspricht 3,33 Millisekunden oder 0,00333 Sekunden). Die Werte werden in Schritten von .000, .003 oder .007 Sekunden gerundet
smalldatetime Datums-
und Zeitdaten vom 1. Januar 1900 bis 6. Juni 2079 mit minutengenauer Genauigkeit. Werte für kleine Daten mit 29,998 Sekunden oder weniger werden auf die nächste Minute abgerundet. Werte mit 29,999 Sekunden oder höher werden auf die nächste Minute aufgerundet.
MSDN: SQL Server DateTime und SmallDateTime
Wenn Sie ein C # DateTime
als Zeichenfolge an SQL übergeben, müssen Sie es wie folgt formatieren, um die maximale Genauigkeit beizubehalten und zu verhindern, dass der SQL Server einen ähnlichen Fehler auslöst.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Update (8 Jahre später)
Erwägen Sie die Verwendung des SQL- DateTime2
Datentyps, der DateTime
mit Datums- 0001-01-01 through 9999-12-31
und Zeitbereich besser mit dem .net übereinstimmt00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Transact-SQL)