SqlDateTime переполнен, но я хочу NULL или MinValue - PullRequest
1 голос
/ 12 января 2011

В этом проекте я отслеживаю, когда что-то создается, редактируется и, наконец, обрабатывается. У меня есть три поля 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.12.9999 11:59:59 PM" когда я пытаюсь добавить это. Я знаю, что не могу отправить NULL. Как бы вы справились с этим?

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

Ответы [ 4 ]

3 голосов
/ 12 января 2011

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

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

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

2 голосов
/ 12 января 2011

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

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

0 голосов
/ 12 января 2011

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

0 голосов
/ 12 января 2011

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

...