MySQL-Datums- / Zeitwert kann nicht in System.DateTime konvertiert werden


84

Ich erhalte diesen Fehler:

MySQL-Datums- / Zeitwert kann nicht in System.DateTime konvertiert werden

während ich versuche, die Daten aus einer MySQL-Datenbank abzurufen. Ich habe das Datum Datentyp in meiner MySQL - Datenbank. Beim Abrufen in meine Datentabelle wird jedoch der obige Fehler angezeigt.

Wie kann ich das beheben?


Antworten:


51

Wenn ich nach "MySQL-Datums- / Zeitwert kann nicht in System.DateTime konvertiert werden" google, werden zahlreiche Verweise auf ein Problem beim Zugriff auf MySQL über Visual Studio angezeigt. Ist das dein Kontext?

Eine vorgeschlagene Lösung ist:

Dies ist kein Fehler, sondern ein erwartetes Verhalten. Bitte überprüfen Sie das Handbuch unter Verbindungsoptionen und setzen Sie "Allow Zero Datetime" auf true, wie auf den angehängten Bildern. Der Fehler wird dann behoben.

Referenz: http://bugs.mysql.com/bug.php?id=26054


2
Ich empfehle, '0000-00-00 00:00:00' nicht als Daten in Datums- / Zeitspalten zu verwenden. Verwenden Sie lieber echte Datumswerte in Ihren Daten - wenn Sie .net verwenden. MySQL kann jedoch alle Daten verarbeiten. Sie sollten alle Ihre Datums- / Zeitwerte durchsuchen.
Bimal Poudel

210

Sie müssen Convert Zero Datetime=TrueIhrer Verbindungszeichenfolge Folgendes hinzufügen , zum Beispiel:

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

3
Vielen Dank! Zu Ihrer Information: Dies bezieht sich auf die MySQL-Verbindungszeichenfolge - nicht auf die SQL Server-Verbindungszeichenfolge.
jp2code

hat mir Zeit gespart. Arbeitete wie ein Zauber
Null Pointer

+1 - Perfekt! Ich hatte null Datumszeiten, weil, wenn die Spalte nicht gefüllt war, in die Tabelle MySQL die Nulldatenzeit geschrieben wurde. Ich ziehe es vor, es von jetzt an für 0970-01-01 zu ändern. Vielen Dank
Drako

21

Ich habe beide Convert Zero Datetime=True& hinzugefügt Allow Zero Datetime=Trueund es funktioniert gut


3

Ziehen Sie den Datum / Uhrzeit-Wert als Zeichenfolge nach unten und führen DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);Sie Folgendes aus: Sie müssen lediglich das Datumsformat für das Datum festlegen, das Sie aus der Datenbank zurückgeben. Höchstwahrscheinlich ist es yyyy-MM-dd HH:mm:ss. Zumindest ist es für mich.

Überprüfen Sie hier weitere Informationen auf der DateTime.ParseExact


2

Lassen Sie MySql Ihren Unix-Zeitstempel in einen String konvertieren. Verwenden Sie die MySQL-Funktion FROM_UNIXTIME (113283901)


2

Ich hatte auch das gleiche Problem und bekam den Spaltennamen und seine Typen. Dann wandle (col_Name als Char) aus dem Tabellennamen. Auf diese Weise erhalte ich das Problem als '0000-00-00 00:00:00' und aktualisiere dann als gültiges Datum und Uhrzeit, bis der Fehler für meinen Fall behoben ist.


1

Sie können die Anwendung vollständig mit dem Datum und der Uhrzeit kompatibel machen, die von MySql verwendet werden. Wenn die Anwendung zur Laufzeit ausgeführt wird, geben Sie diesen Code ein. Gehen Sie zuerst zu den Anwendungsereignissen. In der Liste der Werkzeuge

  1. Gehe zum Projekt
  2. Projekteigenschaften
  3. Wählen Sie die Registerkarte Anwendung
  4. Anwendungsereignisse anzeigen

Dadurch wird eine neue Datei geöffnet. Diese Datei enthält Code, der zu Beginn der Anwendung verwendet wird.

Schreiben Sie diesen Code in diese neue Datei:

 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

0

Anstatt die Verbindungszeichenfolge zu ändern, können Sie die IsValidDateTimeEigenschaft des MySqlDateTimeObjekts verwenden, um festzustellen, ob Sie das Objekt als umwandeln können DateTime.

Ich hatte ein Szenario, in dem ich versuchte, Daten aus einer "UpdateTime" -Spalte zu laden, die nur explizit festgelegt wurde, wenn die Zeile aktualisiert wurde (im Gegensatz zu InsertedTime, die immer festgelegt wurde). In diesem Fall habe ich die MySqlDataReader.GetMySqlDateTimeMethode folgendermaßen verwendet:

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

0

Wenn "allow null datetime = true" nicht funktioniert, verwenden Sie die folgenden Lösungen: -

Fügen Sie dies zu Ihrer Verbindungszeichenfolge hinzu: "Erlaube null datetime = no" - damit funktionierte die Typumwandlung perfekt.


0

Fügen Sie in einem Stimulsoft-Bericht diesen Parameter zur Verbindungszeichenfolge hinzu (klicken Sie mit der rechten Maustaste auf Datenquelle-> Bearbeiten).

Convert Zero Datetime=True;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.