BLToolKit: как получить "пустое" поле даты и времени?
Запрос на выполнение не выполняется, если одно из отображаемых полей имеет поле DateTime, а соответствующее значение в БД имеет значение "0000-00-00" или "0001-01-01". Следующая ошибка возвращается
Невозможно преобразовать значение даты / времени MySQL в System.DateTime
Есть ли возможность получить такое значение?
Я пытался указать 'DateTime?' Значение как тип свойства - это тоже не помогает (на самом деле, я не ожидал, что это будет полезно).
PS я пользуюсь MySql 5.1
3 ответа
Я столкнулся с подобной проблемой при использовании 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"/>
Вы пробовали атрибут MapValue? Я не уверен, что это сработает, но...
[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
Я думаю, что вы должны контролировать это другим свойством.
[MapField("the_date")]
public DateTime? theDate; // Map
[MapIgnore]
public DateTime theDateControl
{
set {
if(theDate.HasValue)
{
....
}
}
}