BLToolKit: как получить «пустое» поле даты и времени?

0

Выполнение запроса выполняется, если одно из полей, которые должны быть сопоставлены, имеет поле DateTime, а соответствующее значение в БД имеет "0000-00-00" или "0001-01-01". При этом возвращается следующая ошибка:

Невозможно преобразовать значение даты и времени MySQL в System.DateTime

Есть ли возможность получить такое значение?

Я пытался указать "DateTime"? значение как тип свойства - это тоже не помогает (на самом деле я не ожидал, что это будет полезно).

P.S. Я использую MySql 5.1

Теги:
bltoolkit

3 ответа

2
Лучший ответ

Я столкнулся с аналогичной проблемой, используя NHibernate с той же ошибкой в ​​исключении.

Это связано с уникальной "особенностью" MySQL для предоставления недопустимых дат в поле DATE, особенно с использованием 0000-00-00 в качестве значения по умолчанию для столбцов DATE NOT NULL. Когда такая дата встречается, она генерирует исключение при преобразовании себя в DateTime.

Предлагаемое решение для этого заключалось в том, чтобы добавить

Разрешить Zero Datetime = True;

но на практике это не сработало для меня. В конечном итоге я решил проблему, изменив строку подключения, добавив

Преобразование Zero DateTime = true;

поэтому ваш раздел app.config будет выглядеть примерно так:

  <connectionStrings>
<add
  name="ConnectionString.MySql"
  connectionString="Server=localhost;Port=3306;Database=BLT;Uid=someuser;Convert Zero DateTime=true;"
  providerName="MySql.Data.MySqlClient"/>

1

Вы пробовали атрибут MapValue? Я не уверен, что это сработает, но...

[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
  • 0
    Не пытался, но спасибо.
0

Я думаю, вам нужно управлять им другим свойством.

 [MapField("the_date")]
 public DateTime? theDate; // Map
 [MapIgnore]
 public DateTime theDateControl
 {
     set {
         if(theDate.HasValue)
         {
            ....
         }
     }
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню