A DateTime
в C # є типом значення, а не посилальним типом, і тому не може бути нульовим. Однак це може бути константа, DateTime.MinValue
яка виходить за межі діапазону DATETIME
типу даних Sql Servers .
Гарантовано, що типи значень завжди матимуть значення (за замовчуванням) (дорівнює нулю), не завжди потребуючи явного встановлення (у цьому випадку DateTime.MinValue).
Висновок: у вас, мабуть, не встановлено значення DateTime, яке ви намагаєтесь передати базі даних.
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
Щодо Sql Server
дата, час
Дати та дані з 1 січня 1753 р. по 31 грудня 9999 р. з точністю до однієї три сотих секунди (що еквівалентно 3,33 мілісекунди або 0,00333 секунди). Значення округлюються з кроком .000, .003 або .007 секунд
невеликий час
Дані та час з 1 січня 1900 р. до 6 червня 2079 р. з точністю до хвилин. значення малого часу з 29,998 секунди або менше округлюються до найближчої хвилини; значення з 29,999 секунди або вище округляються до найближчої хвилини.
MSDN: Sql Server DateTime і SmallDateTime
Нарешті, якщо ви виявите, що передаєте C # DateTime
як рядок в sql, вам потрібно відформатувати його наступним чином, щоб зберегти максимальну точність і не допустити, щоб сервер sql видавав подібну помилку.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Оновлення (через 8 років)
Подумайте про використання DateTime2
типу даних sql, який краще узгоджується з .net DateTime
із діапазоном дат 0001-01-01 through 9999-12-31
та діапазоном часу00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Transact-SQL)