Laden...

Unable to convert MySQL date/time value to System.DateTime

Erstellt von nieselfriem vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.346 Views
N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 11 Jahren
Unable to convert MySQL date/time value to System.DateTime

verwendetes Datenbanksystem: MySQl

Hallo,

wieder einmal das alte Leid. Ich habe google schon um eine Lösung ersucht und jedoch nichts richtiges gefunden.
In meine Tabelle sind DATTIME-Einträge mit 0000-00-00 00:00:00 Einträgen.
Das das .net diese Einträge nicht mag ist mir bekannt. Ich ahbe folgenden Workaround im Netz gefunden


SELECT DATE_FORMAT( `Bewerbzeit` , '%d/%m/%Y' ) AS Bewerbzeit

aber das mag er auch nicht. Jedoch eine konkrete Lösung hat sich mir nicht erschlossen. Was ist zu tun?


string stm = "SELECT DATE_FORMAT( `Bewerbzeit` , '%d/%m/%Y' ) AS Bewerbzeit";
              
        try 
        {
            conn = new MySqlConnection(cs);          
            conn.Open();
            ds = new DataSet();
            da = new MySqlDataAdapter(stm, conn);
            da.Fill(ds, "arbeitnehmer");//Unable to convert MySQL date/time value to System.DateTime

            dg.DataSource = ds.Tables["arbeitnehmer"];

        } catch (MySqlException ex) 
        {
            Console.WriteLine("Error: " + ex.ToString());

        } finally 
        {
            if (conn != null) 
            {
                conn.Close();
            }
        }    


Grüße niesel

F
10.010 Beiträge seit 2004
vor 11 Jahren

Warum gibt es überhaupt solche Datensätze in der DB?
Wenn das Feld mit Allows NULL angelegt wäre, gäbe es das Problem nicht.

So bleibt dir eigentlich nur per CASE den Wert in einen gültigen umzuwandeln.

N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 11 Jahren

Allows NULL Meinst du damit, dass BNOT NULL nicht vorhanden ist in der Struktur des Attributes?

Grüße

3.825 Beiträge seit 2006
vor 11 Jahren

Ich mach das so :

private void MySqlDatumKorrigieren()
{
	if (Parameter.dbprovider != Parameter.DatenbankProvider.MySQL) return;

	//Leeres Datum kann vom .Net Connector nicht verarbeitet werden
	db.ExecuteSQL("update tk set tk_em_gesendet = '1800-01-01' where tk_em_gesendet = '0000-00-00'");
	db.ExecuteSQL("update pa set pa_wirtjahr = '1800-01-01' where pa_wirtjahr = '0000-00-00'");
}

Das Jahr 1800 muss dann im Frontend als leeres Datum definiert werden. Man kann das 0000-Datum natürlich auch in null wandeln wenn die Spalte null erlaubt.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3