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


85

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

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

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

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


Ответы:


51

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

Предлагается одно решение:

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

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


2
Я предлагаю не использовать «0000-00-00 00:00:00» в качестве данных в столбцах даты и времени. Лучше используйте реальные значения даты в ваших данных - если вы используете .net. Однако MySQL может обрабатывать любые даты. Вы должны просмотреть все свои значения даты / времени.
Bimal Poudel,

212

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

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

3
Благодарность! К вашему сведению: это касается строки подключения MySQL, а не строки подключения SQL Server.
jp2code

сэкономил мое время.
Null Pointer

+1 - Отлично! У меня было нулевое время, потому что, когда столбец не был заполнен, напишите в таблице MySQL нулевое время. Я предпочитаю поменять его сейчас на 0970-01-01. Большое спасибо
Драко

21

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


3

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

Проверьте здесь дополнительную информацию о DateTime.ParseExact



2

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


1

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

  1. Перейти к проекту
  2. Свойства проекта
  3. Выберите вкладку Приложение
  4. Просмотр событий приложения

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

Напишите этот код в этом новом файле:

 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

1

Вместо того, чтобы изменять строку подключения, вы можете использовать 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;
    }
}

0

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

Добавьте это в строку подключения: «allow zero datetime = no», чтобы преобразование типов работало идеально.


0

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

Convert Zero Datetime=True;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.