DateTime
w języku C# jest typem wartości, a nie typem referencyjnym i dlatego nie może mieć wartości null. Może to być jednak stała DateTime.MinValue
który jest poza zakresem serwerów SQL DATETIME
typ danych.
Typy wartości są gwarantowane, że zawsze mają (domyślną) wartość (zero) bez konieczności jawnego ustawiania (w tym przypadku DateTime.MinValue).
Wniosek jest taki, że prawdopodobnie masz nieustawioną wartość DateTime, którą próbujesz przekazać do bazy danych.
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
Odnośnie serwera SQL
MSDN:Sql Server DateTime i SmallDateTime
Wreszcie, jeśli okaże się, że przechodzisz C# DateTime
jako ciąg do sql, musisz go sformatować w następujący sposób, aby zachować maksymalną precyzję i zapobiec wystąpieniu podobnego błędu przez serwer sql.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Aktualizacja (8 lat później)
Rozważ użycie sql DateTime2
typ danych, który lepiej pasuje do .net DateTime
z zakresem dat 0001-01-01 through 9999-12-31
i przedział czasu 00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");