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

StackOverflow https://stackoverflow.com/questions/4290106

  •  28-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Разрешить нулевое значение Datetime = True;

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

Преобразование нуля 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)
         {
            ....
         }
     }
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top