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");