C# - Access - Update-Query



  • Hey,

    ich experimentiere momentan ein bisschen mit Access und C# rum. Dabei bin ich momentan auf ein Problem gestoßen. Wie kann ich eine korrekte Query erstellen, die einen Datumsvergleich in der Bedingung enthält? Es scheint mir, als müsste dafür ein spezielles Format genutzt werden.

    Folgende Zeile habe ich probiert, aber es passiert einfach nichts:

    dbQuery = "UPDATE tbl_Daten SET Menge = Menge + 1 WHERE id_Artikel=\"" + txtArtNr.Text + "\" AND Datum=Format(\"" + item.ToString() + "\", \"mm/dd/yyyy\")";
    

    Die Variable item ist in vom Typ Object und hat z.B. den Inhalt 15.03.2010. Habe versucht mit Format das Datum umzuwandeln. Muss wohl ein speziellen Aufbau oder so haben, keine Ahnung 😞

    Wie muss ich vorgehen, damit es mit dem Datum klappt? Gibt es dafür eine Funktion, die den Vergleich durchführt oder ähnliches?

    Würde mich über Hilfe sehr freuen.



  • Verwende besser Parameter:

    // Item in DateTime umwandeln:
    DateTime datum=DateTime.Parse(item.ToString());
    
    DbCommand cmd=conn.CreateCommand();
    cmd.CommandText="UPDATE tbl_Daten SET Menge = Menge + 1 WHERE id_Artikel=@id_Artikel AND Datum=@Datum;";
    cmd.Parameters.AddWithParam("@id_Artikel",txtArtNr.Text);
    cmd.Parameters.AddWithParam("@Datum", datum);
    cmd.ExecuteNonQuery();
    cmd.Dispose();
    

    (DbCommand ersetzen durch OleDbCommand oder was auch immer du nutzt...)

    Wenn Du ihm direkt das Datum als DateTime-Objekt gibst, kann der ADO.NET-Treiber so direkt das Datum selbst so formattieren wie es die Datenbank gerne hätte...



  • Um deinen Query mit Datumsangaben zu füllen, musst du folgendes machen:

    Cultureinfo("en/us") Objekt instanzieren.

    Im Query :

    "datum = #" + item.tostring(cultinf)+"#"

    Hintergrund ist, dass Access das Datum in folgendem Format haben möchte:

    #YYYY/MM/DD#

    Das bekommst Du am besten durch Cultureinfo als INformation an tostring()

    Hoffe, ich konnte mich verständlich ausdrücken, ist spät und hatte einen anstrengenden Tag 🙂


Anmelden zum Antworten