Дата в SQL в LINQ to Entities - PullRequest
1 голос
/ 16 июня 2011

Использование LINQ для сущностей. Этот код в анонимном виде

MessageDate = DateTime.Parse(email.MessageDate),

выдает эту ошибку:

Переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 31.12.9999 11:59:59 вечера.

MessageDate - это SQL DateTime, а email.MessageDate - это строка.

Я попробовал это, но это не помогло:

MessageDate = DateTime.Parse(string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Parse(email.MessageDate)))

Любая помощь приветствуется.


Подробнее:

Строковое значение email.MessageDate: «Ср, 15 июня 2011 13:29:00 -0400»

Кроме того, если я просто сделаю

MesssageDate = Date.Now

Я получаю ту же ошибку.

Кроме того, это SQL Server 2005


Еще тестирование: я установил точку останова, чтобы увидеть, что разрешено в значение true

var x = 1;
if (DateTime.Now > System.Data.SqlTypes.SqlDateTime.MinValue.Value)
    x = 1; // True
if (DateTime.Now < System.Data.SqlTypes.SqlDateTime.MinValue.Value)
    x = 1;
if (DateTime.Now > System.Data.SqlTypes.SqlDateTime.MaxValue.Value)
    x = 1;
if (DateTime.Now < System.Data.SqlTypes.SqlDateTime.MaxValue.Value)
    x = 1; // True
if (DateTime.Now < DateTime.MinValue)
    x = 1;
if (DateTime.Now > DateTime.MinValue)
    x = 1; // True
if (DateTime.Now < DateTime.MaxValue)
    x = 1; // True
if (DateTime.Now > DateTime.MaxValue)
    x = 1;

Так что мне кажется, что DateTime.Now находится во всех допустимых диапазонах.

Спасибо, Mark

Ответы [ 3 ]

0 голосов
/ 16 июня 2011

Если вы используете SQL 2008, вы можете использовать datetime2 вместо datetime. Если вы не можете изменить свой тип данных SQL, я рекомендую использовать собственный «умный» синтаксический анализатор DateTime.

0 голосов
/ 17 июня 2011

Это было нелепо трудно найти. Вот ответ:

У LINQ to Entities есть некоторые проблемы, связанные с непредоставлением информации Date в таблицу с полями DateTime. Таким образом, даже если вам не нужно помещать данные в поле DateTime, отправка не будет работать, если вы этого не сделаете. Так что все, что я делал на полях, где у меня не было данных, было, например, это ...

MessageDeliveryTime = null,

Теперь, еще одна вещь, которая получила меня, это это. У меня есть столбец в названии базы данных, который автоматически заполняется с помощью getdate (). LINQ to Entities не заботится о ваших маленьких значениях по умолчанию. Вы должны передать что-то; так что просто сделайте это:

Created = DateTime.Now

Я надеюсь, что ушедшие часы моей жизни не будут напрасными, и это поможет кому-то.

Mark

0 голосов
/ 16 июня 2011

Хорошо разбирает строку, но, к сожалению, действительные диапазоны дат .net не совпадают с действительными диапазонами дат SQL.email.MessageDate, вероятно, имеет значение DateTime.MinValue, которое является более ранним, чем самая ранняя действительная дата SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...