A DateTime
w C # jest typem wartości, a nie typem referencyjnym, w związku z czym nie może mieć wartości null. Może to być jednak stała, DateTime.MinValue
która jest poza zakresem DATETIME
typu danych Sql Servers .
Typy wartości zawsze mają (domyślną) wartość (zero) bez konieczności ich 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
datetime
Data i godzina od 1 stycznia 1753 do 31 grudnia 9999, z dokładnością do jednej trzystu sekundy (odpowiednik 3,33 milisekundy lub 0,00333 sekundy). Wartości są zaokrąglane do przyrostów co .000, .003 lub .007 sekundy
smalldatetime
Data i czas od 1 stycznia 1900 r. do 6 czerwca 2079 r., z dokładnością do minuty. małe wartości czasu trwania z 29,998 sekund lub mniej są zaokrąglane w dół do najbliższej minuty; wartości z 29,999 sekund lub więcej są zaokrąglane w górę do najbliższej minuty.
MSDN: Sql Server DateTime i SmallDateTime
Na koniec, jeśli przekażesz C # DateTime
jako ciąg do sql, musisz sformatować go w następujący sposób, aby zachować maksymalną precyzję i zapobiec wyrzucaniu przez serwer sql podobnego błędu.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Aktualizacja (8 lat później)
Rozważ użycie DateTime2
typu danych sql, który lepiej pasuje do .net DateTime
z zakresem dat 0001-01-01 through 9999-12-31
i zakresem czasu00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Transact-SQL)