BLToolKit: как получить «пустое» поле даты и времени? - PullRequest
0 голосов
/ 27 ноября 2010

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

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

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

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

PS Я использую MySql 5.1

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

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

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

Для этого было предложено добавить

Allow Zero Datetime = True;

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

Convert 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 голос
/ 06 апреля 2011

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

[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
0 голосов
/ 27 октября 2014

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

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