Ошибка - переполнение SqlDateTime. Должен быть между 01.01.1753 0:00:00 и 31.12.9999 23:59:59

мне записали приложение на 2008.

Мы используем linq для объектов.

Мы должны были теперь переключить DB на 2005. Я получаю следующую ошибку на linq Запросах Select:

Ошибка - переполнение SqlDateTime. Должен быть между 01.01.1753 0:00:00 и 31.12.9999 23:59:59.

Незаконная строка:

DateOfBirth = ((s.Date_Of_Birth == null) || (s.Date_Of_Birth <= lowdate)) ?
    DateTime.MinValue : s.Date_Of_Birth.Value,

DateOfBirth имеет тип DateTime и свойство в нашем объекте собственного дела (не объект).

Кто-либо знает, как я могу изменить эту строку для создания этого запроса выполненным?

10
задан OMG Ponies 3 August 2010 в 17:33
поделиться

5 ответов

Убедитесь, что lowdate не меньше 1/1/1753.

Если вы попытаетесь указать дату до этого, EF преобразует ее и передаст в ваш запрос. Кроме того, вам нужно не использовать DateTime.MinValue в запросе, а использовать то, что будет вашим min:

DateOfBirth = ((s.Date_Of_Birth == null) || (s.Date_Of_Birth <= lowdate)) ?
    new DateTime(1753,1,1) : s.Date_Of_Birth.Value;

Помните, что с EF запрос компилируется и преобразуется в SQL на сервере, поэтому все ценности и здесь должны быть подходящими.

При этом я лично предпочел бы сохранить DateOfBirth как DateTime? (тип, допускающий значение NULL) вместо использования «магического значения» ( DateTime.MinValue ) для хранения пустых или несоответствующих значений базы данных.

14
ответ дан 3 December 2019 в 14:43
поделиться

Это часто происходит, когда вы пытаетесь сохранить DateTime.MinValue в поле SQL DateTime

1
ответ дан 3 December 2019 в 14:43
поделиться

Кроме того, чтобы добавить сюда хорошие ответы, попробуйте использовать SqlDateTime.MinValue вместо 1/1/1973 или DateTime.MinValue.

http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.minvalue.aspx

Конечно, это то же самое, что и 01.01.1973, но это много чище и намного менее волшебно.

7
ответ дан 3 December 2019 в 14:43
поделиться

DateTime.MinValue эквивалентно 00: 00: 00.0000000, 1 января 0001 .

А DateTime в SQL 2005 находится между 01.01.1753 12:00:00 AM и 31.12.1999 11:59:59 P

Вместо использования DateTime.MinValue следует создать

public static DateTime DateTimeMinValueInSQL2005 = new DateTime(1753,1,1);

и используйте его вместо DateTime.MinValue;

3
ответ дан 3 December 2019 в 14:43
поделиться

Конечно, замените DateTime.MinValue на «01.01.1753 12:00:00 AM»

1
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: