SqlDateTime переполнен, но я хочу NULL или MinValue

В этом проекте я отслеживаю, когда что-то создается, редактируется и, наконец, обрабатывается. У меня есть три поля DateTime для этого. Код ниже для когда я создаю запись.

newsArchive.CreateDateTime = DateTime.Now;
newsArchive.ModifyDateTime = DateTime.MinValue;
newsArchive.SendDateTime = DateTime.MinValue;
naRepository.Add(newsArchive);
naRepository.Save();

Я получаю сообщение "SqlDateTime переполнение. Должно быть между 01.01.1753 12:00:00 и 31.129999 11:59:59 вечера". когда я пытаюсь добавить это. Я знаю, что не могу отправить NULL. Как бы вы справились с этим?

Я использую Linq2SQL для обработки этого.

4 ответа

Решение

Почему вы не можете отправить ноль? AFAIK, Linq2SQL поддерживает типы значений, допускающие значение NULL; вам просто нужно, чтобы столбец в БД был обнуляемым, иначе L2S не будет проецировать DAO с обнуляемым типом.

Вы можете использовать (DateTime)(SqlDateTime.MinValue) вместо DateTime.MinValue. При этом будет использоваться минимальное SQL-совместимое значение даты и времени, явно приведенное к DateTime.

Хотя и SqlDateTime, и DateTime на самом деле хранят время как значение "Ticks" UInt64, разница между этими двумя типами заключается в том, что SQL Server использует другую эпоху (значение для нуля) и другое разрешение (то, что 1 "отметка" представляет в долях второе), чем дата / время CLR.

Какую версию SQL Server вы используете? Если вы используете SQL 2008 (или 2008 R2), вы можете использовать тип данных datetime2, который может поддерживать весь диапазон типов.NET DateTime.

В противном случае используйте NULL (ваша модель должна иметь свойство типа Nullable<DateTime>) или жить в рамках ограничений типа данных и DateTime.MinValue превышает ограничение типа datetime SQL.

Создайте свою собственную минимальную дату - переменную Date со значением 1/1/1753 12:00:00 AM и используйте ее вместо DateTime.MinValue

Тип данных datetime2 позволяет использовать даты уже в 1 году. Вы также можете использовать DateTime? разрешить нулевые даты в вашем.net коде

Другие вопросы по тегам