Неможливо перетворити значення дати / часу MySQL у System.DateTime


85

Я отримую цю помилку:

Неможливо перетворити значення дати / часу MySQL у System.DateTime

поки я намагаюся отримати дані з бази даних MySQL. У моїй базі даних MySQL є тип даних дати . Але, отримуючи його в мою таблицю даних, він отримує помилку вище.

Як я можу це виправити?


Відповіді:


51

Якщо я погуглив за "Неможливо перетворити значення дати / часу 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
Дякую! FYI: Це стосується рядка підключення MySQL, а не рядка підключення SQL Server.
jp2code

врятував мій час. Працював як шарм
Null Pointer

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

21

я додав і Convert Zero Datetime=True& Allow Zero Datetime=Trueі це чудово працює


3

Витягніть значення дати та часу у вигляді рядка та зробіть a 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

якщо "дозволити нуль datetime = true" не працює, використовуйте такі рішення: -

Додайте це до свого рядка підключення: "дозволити нуль datetime = no" - це змусило амплітуду типів працювати бездоганно.


0

У звіті Stimulsoft додайте цей параметр до рядка підключення (клацніть правою кнопкою миші на джерелі даних-> редагувати)

Convert Zero Datetime=True;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.