daTom Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 (bearbeitet) Hallo, ich muss euch mal wieder um Hilfe bitten, da ich absolut nicht weiß wie ich das angehen soll. Ich habe ein Grid auf einer aspx-Seite, in dem ich es erlaube in einer bestimmten Spalte mit Hilfe einer Checkbox ein Flag auf "erledigt" oder "nicht erledigt" zu setzen. Zudem muss der Benutzer in einer TextBox ein Kürzel eintragen, mit der er die Veränderung des Datensatzes bestätigt. Nun möchte ich halt, dass die veränderten Datensätze auch in der Datenbank gespeichert werden. Nur leider scheitert es hier an meinen bislang mangelden Ado.NET - Kenntnissen. Zuerst mal das Statement: public static string sql = UPDATE positions SET done = :Done, worker = :Worker WHERE ID = :ID Bei der Datenbank handelt es sich im Übrigen um eine Oracle-Datenbank. Nun der entscheidene Auszug aus meiner Datenschicht: using (OracleConnection connection = this.OpenConnection()) { OracleCommand cmd = new OracleCommand(sql, connectionString); cmd.Add(new OracleParameter(":Worker", OracleType.VarChar)); cmd.Add(new OracleParameter(":Done", OracleType.Boolean)); cmd.Add(new OracleParameter(":ID", OracleType.Int32, 20, "id")); cmd.Parameters[":ID"].SourceVersion = DataRowVersion.Original; cmd.Parameters[":Bearbeiter"].Value = //Text aus der Textbox cmd.Parameters[":Done"].Value = Wert aus dem Grid OracleDataAdapter adapter = new OracleDataAdapter(); adapter.UpdateCommand = cmd; int affectedRows = adapter.Update(dataRows); return affectedRows; } Leider funktioniert das ganze nicht wirklich. Eine Exception erhalte ich nicht, aber die Update Methode liefert immer 0 zurück. Das dataRows ist ein Array von DataRows die ich mit der Methode ds.Tables["ToDoData"].Select(null, null, DataViewRowState.ModifiedCurrent) erhalte. In dem Array stecken dann auch tatsächlich alle veränderten Zeilen als DataRows. Hat jemand einen Tip für mich? So langsam verzweifel ich daran. Aus der MSDN Dokumentation werde ich leider nicht schlau. Gruß daTom Bearbeitet 21. Oktober 2008 von daTom Zitieren
Amstelchen Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 auf den allerersten blick ist dein string sql ohne anführungszeichen initialisiert. wenn mich mein hirn jetzt nicht ganz täuscht, sind strings aber immer (auch in C#) in solche zu setzen. s'Amstel Zitieren
daTom Geschrieben 22. Oktober 2008 Autor Geschrieben 22. Oktober 2008 Hallo Amstelchen, da ist mir beim kopieren wohl ein Fehler unterlaufen. Sie sind natürlich in Anführungszeichen gesetzt. Ich bekomme ja auch keinen Compiler-Fehler. Der wäre ja auch ziemlich eindeutig Ne, mein Problem ist, dass die Tabelle halt nicht upgedatet wird. Gruß daTom Zitieren
Argbeil Geschrieben 22. Oktober 2008 Geschrieben 22. Oktober 2008 Hi Tom, wie so oft hier bei ADO.NET Themen: Falscher Ansatz! Du kannst es so lösen wie du es angegangen bist, machst dir damit aber viel zu viel Arbeit. Du hast deine Daten ja in einer DataTable und diese vermutlich auch mit einem DataAdapter oder einem TableAdapter aus der DB geladen. Der Adapter kann die nötigen CRUD Statement selbstständig generieren, das macht er über den SQL Command Builder. Du benötigst die Instanz des Adapters der die Daten geladen hat und machst dann ein adpater.Update( dataTable );, das führt dazu das für jede DataRow in der Table das passende SQL Statement generiert und gegen die Datenbank ausgeführt wird. Erst wenn dir das SQL Statement aus irgendeinem Grund nicht gefällt musst du selbst SQL-Statement schreiben - aber die dann bitte auch in das entsprechende Command Objekt des Adapters. Als Lesewerk kann ich von MS Press die ADO.NET 2.0 Core Reference empfehlen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.