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

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

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

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

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


person Ankit Chauhan    schedule 22.04.2011    source источник
comment
Возможный дубликат Невозможно преобразовать значение даты / времени MySQL в System.DateTime   -  person Gopi    schedule 13.10.2016


Ответы (11)


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

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

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

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

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

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

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True
person agni    schedule 27.06.2012
comment
Спасибо! К вашему сведению: это касается строки подключения MySQL, а не строки подключения SQL Server. - person jp2code; 20.06.2014
comment
сэкономил мое время. Работал как шарм - person Null Pointer; 22.03.2017
comment
+1 - Отлично! У меня было нулевое время, потому что, когда столбец не был заполнен, напишите в таблице MySQL нулевое время. Я предпочитаю изменить его сейчас на 0970-01-01. Большое вам спасибо - person Drako; 22.08.2018
comment
вау, это так не работает - person phil123456; 10.02.2021

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

person Kiddo    schedule 11.07.2012

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

Здесь можно найти дополнительную информацию о DateTime.ParseExact

person Tim Meers    schedule 22.04.2011

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

person Jakob Alexander Eichler    schedule 22.04.2011

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

person Singaravelan    schedule 12.05.2014

Вместо изменения строки подключения вы можете использовать свойство 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;
    }
}
person P Walker    schedule 22.09.2018

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

Convert Zero Datetime=True;
person Mostafa Asadi    schedule 04.07.2019

Вы можете сделать приложение полностью совместимым с датой и временем, используемыми 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
person KHALID    schedule 19.11.2016

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

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

person Manoher Kumar    schedule 21.02.2019

При использовании EF edmx с MySql проверьте атрибут Precision в типе объекта.

<EntityType Name="table">
  <Key>
    <PropertyRef Name="Id" />
  </Key>
  <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
  <Property Name="date_field" Type="datetime" Precision="0" Nullable="false" />
</EntityType>

Если вы внесли изменения в поле datetime, возможно, вам не хватает этого атрибута в свойстве.

person Edheo    schedule 06.05.2021