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?

Ankit Chauhan
quelle

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

dkretz
quelle
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
agni
quelle
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

Kiddo
quelle
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

Tim Meers
quelle
2

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

Jakob Alexander Eichler
quelle
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.

Singaravelan
quelle
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
KHALID
quelle
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;
    }
}
P Walker
quelle
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.

Manoher Kumar
quelle
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;
Mostafa Asadi
quelle