Ошибка: Unable to convert MySQL date/time value to System.DateTime

В комментариях многие жалуются, что у них при работе с базой данных Mysql возникает ошибка: Unable to convert MySQL date/time value to System.DateTime и просят подсказать или показать, как можно решить данную проблему.

Возникновение ошибки

Рассмотрим возникновение данной ошибки на простой примере.

Предположим, что у нас есть база данных MyDB, в которой содержится пустая таблица MyTestTable, с одной колонкой date.

Колонка date хранит дату (формат 0000-00-00) и имеет тип Date.

тип date

Добавим в таблицу новую запись, при этом значение оставим пустым.

колонка date

Так как мы не указали значение для колонки date, то ей (по умолчанию) было установлено значение: 0000-00-00.

Теперь попробуем получить значение из таблицы, для этого создадим метод GetDate.

Более подробно о реализации данного метода можно прочитать в статье: Работа с базой данных Mysql

Выполним метод

При попытке загрузить полученные данные в объект DataTable (строка: dt.Load(dr)) возникает исключение: Unable to convert MySQL date/time value to System.DateTime.

Решение проблемы

Когда мы создаем строку подключения к базе данных Mysql, в данном примере для этого используется объект типа MySqlConnectionStringBuilder, то в ней мы обычно перечисляем различные опции или параметры, например, такие как имя базы данных, имя пользователя, пароль и так далее.

Но, кроме этих параметров, так же строка подключения содержит и некоторые другие параметры, которые мы хотя и не указываем явно, но они все равно передаются в строке подключения с уже установленными (по умолчанию) значениями.

Так, например строка подключения содержит два дополнительных параметра: AllowZeroDateTime и ConvertZeroDatetime, которые (по умолчанию) имеют значение false, например:

В объекте типа MySqlConnectionStringBuilder эти же параметры представлены в виде свойств:

А теперь посмотрим, что происходит, когда мы пытаемся получить нулевую дату при установленных значениях: false и true.

Для большей наглядности внесём небольшое изменение в содержимое метода GetDate:

было

стало

И так посмотрим, какие результаты дают методы: GetDateTime и GetValue.

AllowZeroDateTime

Если установлено значение false (AllowZeroDateTime = false) , то для всех валидных значений, например: 12.12.2013 возвращается объект типа System.DateTime, а для не валидных значений, например, таких как нулевая дата (00.00.0000) или дата и время, исключение.

Если установлено значение true (AllowZeroDateTime = true), то в таком случае для всех валидных значений будет также возвращаться объект System.DateTime, а для всех не валидных значений, которые также ещё называют «запрещенные значения» (в данном случаи — это нулевая дата) объект типа MySqlDateTime.

ConvertZeroDatetime

По умолчанию так же имеет значение false (ConvertZeroDatetime = false), при котором всегда возвращается исключение для всех запрещенных значений.

Значение true (ConvertZeroDatetime = true) возвращает значение: DateTime.MinValue, которое имеет вид: 01.01.0001 0:00:00, если в колонке содержится нулевая дата или пара: дата и времени.

В нашем примере оба параметра имеют значения FALSE, поэтому в результате мы получаем исключение. Чтобы это исправить, установим значение true для параметра ConvertZeroDatetime.

Читайте также:

Похожие темы

Вызов хранимой процедуры на клиенте... Вызов хранимой процедуры MySQL на клиенте В этой статье добавим возможность вызова хранимой процедуры из нашего клиентского приложения. Для начала...
Разрешение проблемы с Warning: mysqli::mysqli(): T... На моём хостинге можно выбирать версию PHP. На выбор предоставляются PHP 5.2 / 5.3 / 5.4 / 5.5 / 5.6. Много лет назад, когда я только создавал свой ...
Новости софта от 31 декабря 2014 года (PHP, phpMyA... PHP 5.6.4, PHP 5.5.20, PHP 5.4.36 Обновились все три поддерживаемых ветки PHP. Исправлений достаточно много, в ядре и в различных модулях, но кр...
Добавление новой записи в базу данных Mysql... Как добавить новую запись в базу данных Mysql? Из этой статьи Вы узнаете, как добавить новую запись в базу данных Mysql. Вопрос о добавление данных о...
Новости софта от 28 сентября 2014 года (WebMoney K... Обновилась утилита для работы с одной из популярных платежных систем в интернете — WebMoney. Новая версия имеет номер WebMoney Keeper Classic ...