Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


Ошибка: 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, то в ней мы обычно перечисляем различные опции или параметры, например, такие как имя базы данных, имя пользователя, пароль и так далее.

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


Codeby Security School от Сodeby

Мы запустили свою онлайн школу по информационной безопасности. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного в курсе Paranoid


Так, например строка подключения содержит два дополнительных параметра: 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.

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


Безопасная сделка с гарантом Сodeby

Гарант является доверенным посредником между Участниками при проведении сделки.​ Услуга сайта «Проведение сделок через Гаранта» предоставляется всем зарегистрированным пользователям codeby.net Подробнее ...


Похожие темы

MiAl’s Server Pack (полностью настроенный и рабочи... 1. Описание MiAl’s Server Pack – это локальный сервер, сконфигурированный и готовый к работе. Для начала работы, требуется только распаковать и запуст...
Как удалить или переместить учетную запись пользов... Я создал учетную запись пользователя MySQL / MariaDB, используя эту страницу. Теперь я удалил свой блог WordPress, и я хочу удалить эту учетную запись...
Самые частые ошибки и вопросы при настройке и уста... Ошибка: Fatal error: Call to undefined function mb_detect_encoding() in C:serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc on line 177 Реше...
Установка и настройка сервера Apache, PHP, MySQL, ... Good things should be shared. Здесь инструкция для Windows. Если у вас Linux, то вам сюда "Установка и настройка Apache, PHP, MySQL, p...
Разрешение проблемы с Warning: mysqli::mysqli(): T... На моём хостинге можно выбирать версию PHP. На выбор предоставляются PHP 5.2 / 5.3 / 5.4 / 5.5 / 5.6. Много лет назад, когда я только создавал свой ...