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 Подробнее ...


Похожие темы

Установка MySQL for Visual Studio Как установить MySQL for Visual Studio? MySQL for Visual Studio это продукт от компании Microsoft, который предоставляет дополнительные инструменты д...
Автоматическая инъекция SQL и инструмент захвата б... Перевод: Анна Давыдова Источник: n0where.net Sqlmap является открытым инструментом для проведения пентестов, который автоматизирует процесс обнаруже...
Как установить Apache, MariaDB/MySQL и PHP на Cent... Если вас интересует, как установить сервер на Windows, то вам сюда "Установка Apache, PHP, MySQL, phpMyAdmin на Windows". Apache, Mari...
Как защитить LAMP сервер на CentOS или RHEL... LAMP — это программный стек, состоящий из Linux (операционной системы, которая является базовым уровнем), Apache (веб-сервера, который «...
Новости софта от 26 сентября 2014 года (CKEditor, ... Обычно информация по LibreOffice передвигается в самый низ новости, т. к. эта программа не имеет прямого отношения к Интернету и сетевым технол...