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

Я получаю эту ошибку:

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

пока я пытаюсь извлечь данные из базы данных MySQL. У меня есть тип данных даты в моей базе данных MySQL. Но, возвращая его в мой datatable, он получает ошибку выше.

Как я могу это исправить?

Ответ 1

Если я google для "Невозможно преобразовать значение даты/времени MySQL в System.DateTime", я вижу многочисленные ссылки на проблему с доступом к MySQL из Visual Studio. Это ваш контекст?

Предлагаемое решение:

Это не ошибка, а ожидаемая поведение. Пожалуйста, ознакомьтесь с подключить опции и установить "Разрешить ноль" Datetime "до true, как при прикрепленном изображения, и ошибка исчезнет.

Ссылка: http://bugs.mysql.com/bug.php?id=26054

Ответ 2

Вы должны добавить Convert Zero Datetime=True в строку подключения, например:

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True

Ответ 3

i добавил как Convert Zero Datetime=True, так и Allow Zero Datetime=True, и он отлично работает

Ответ 4

Потяните значение datetime вниз как строку и выполните DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles); Вам просто нужно установить формат даты для даты, которую вы возвращаете из базы данных. Скорее всего, это yyyy-MM-dd HH:mm:ss. По крайней мере, для меня.

Подробнее здесь о DateTime.ParseExact

Ответ 5

Пусть MySql преобразует вашу временную метку unix в строку. Используйте функцию mysql FROM_UNIXTIME (113283901)

Ответ 6

Я также столкнулся с той же проблемой и получил имя столбца и его типы. Затем введите (col_Name как Char) из имени таблицы. Таким образом, я получаю проблему как "0000-00-00 00:00:00", а затем я обновляю как допустимую дату и время, когда ошибка уходит за мой случай.

Ответ 7

Вы можете сделать приложение полностью совместимым с датой и временем, которое используется MySql. Когда приложение запускается во время выполнения, укажите этот код. Сначала перейдите в Службу приложений. В списке инструментов

  • Перейти к проекту
  • Свойства проекта
  • Выберите вкладку "Приложение"
  • Просмотр событий приложения

Это откроет новый файл. Этот файл содержит код, используемый в начале приложения.

Введите этот код в новый файл:

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class

Ответ 8

Вместо того, чтобы изменить строку подключения, вы можете использовать IsValidDateTime свойство MySqlDateTime объекта, чтобы помочь вам определить, если вы можете преобразовать объект как DateTime.

У меня был сценарий, в котором я пытался загрузить данные из столбца "UpdateTime", который был явно установлен только при обновлении строки (в отличие от InsertedTime, который всегда был установлен). Для этого случая я использовал метод MySqlDataReader.GetMySqlDateTime следующим образом:

using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}

Ответ 9

если "allow zero datetime = true" не работает, используйте следующие решения: -

Добавьте это к вашей строке подключения: "allow zero datetime = no" - это сделало приведение типа отлично.

Ответ 10

В отчете Stimulsoft добавьте этот параметр в строку подключения (щелкните правой кнопкой мыши datasource-> изменить).

Convert Zero Datetime=True;