MySQL OdbcDataReader GetDate() wenn Eintrag 0000-00-00 ist

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Schmittmuthelm.

    MySQL OdbcDataReader GetDate() wenn Eintrag 0000-00-00 ist

    Ich möchte aus einer MySQL-DB mehrere Tabellen auslesen. Einige Spalten sind vom Typ Date und haben bereits Einträge mit dem eingestellten Default-Wert 0000-00-00.
    Wenn ich jetzt mit einem OdbcDataReader-Objekt reader die Methode reader.GetDate(spaltenIndex) bzw. reader.GetDateTime(spaltenIndex) aufrufe, knallt es, da DateTime.MinValue = {01.01.0001 00:00:00} und ich deshalb 0000-00-00 nicht in eine valide .net-DateTime konvertieren kann.

    Aktuell umgehe ich das so:

    C#-Quellcode

    1. var isDateTimeValid = DateTime.TryParse(reader.GetString(columnIndex), out DateTime dbDateTime);
    2. MyList.Add(new Entry(isDateTimeValid ? dbDateTime : null));
    3. //bzw. so, falls die Spalte nicht nullable ist
    4. MyList.Add(new Entry(isDateTimeValid ? dbDateTime : new DateTime()));


    Das ganze wird natürlich recht nervig und unübersichtlich wenn es mehrere Date-Spalten mit solchen Einträgen in der Tabelle gibt.
    Ich hoffe man kann das ganze eleganter lösen und ihr könnt mir helfen.

    Die ganzen 0000-00-00-Einträge in der Db zu ändern ist keine Option.
    Dumm ist der, der dumm ist. Nicht andersrum!