C# DataGrid DeleteCommand (MySql)

Mossos

Ensign
Registriert
Juni 2008
Beiträge
152
Hallo zusammen!

Hab folgendes Problem:
Ich habe ein DataGrid, welches über einen MySqlDataAdapter (=>DataSet) gefüllt wird. Eine Spalte davon heißt "company".
Wenn ich eine Zeile lösche, soll nicht nur die Zeile in der entsprechenden Sql-Table gelöscht werden, sondern auch zwei abhängige tables. Die tables besitzen den Namen "users_[company]" und "costcenters_[company]" (ohne die eckigen Klammern).

Jetzt gibt es ja für das DataGrid den definierbaren DeleteCommand und die Update()-Funktion, die bei Änderungen den entsprechenden Command ausführt.

Ich hab das versucht so umzusetzen:
Code:
string deleteString = "DROP TABLE  `abrechnung`.`users_@p1`; 
                       DROP TABLE  `abrechnung`.`costcenters_@p1`; 
                       DELETE FROM `abrechnung`.`clients` WHERE ID=@p5";

            MySqlCommand cmdUp = new MySqlCommand(updateString, con);
            cmdUp.Parameters.Add("@p1", MySqlDbType.VarChar, 45, "company");

            MySqlCommand cmdDel = new MySqlCommand(deleteString, con);
            cmdDel.Parameters.Add("@p5", MySqlDbType.Int16, 8, "ID");

           da.DeleteCommand = cmdDel;

Später im Code dann beim Klick auf speichern:

SqlDataAdapter.Update(dataSet);


Der Fehler liegt darin, dass @p1 nicht in den Namen umgesetzt wird, was ich auch verstehen kann. Mir fällt nur leider keine Lösung ein, wie ich den Wert der Spalte sonst erhalten kann.
Hab auch versucht, das einfach mit nem Trigger zu realisieren, doch da zickt MySql rum weil man in Triggern keine implizieten Commits ausführen darf (=> Drop table) ...

Hat da vielleicht jemand ne Idee??

Gruß,
Mossos.
 
also wenn das nur das problem mit @p1 ist dann und in p1 der name gespeichert ist, dann machs doch so

Code:
string deleteString = "DROP TABLE  `abrechnung`.`users_" + p1 + "`; 
                       DROP TABLE  `abrechnung`.`costcenters_" + p1 + "`; 
                       DELETE FROM `abrechnung`.`clients` WHERE ID=" + p5;

oder du meinst was ganz anderes:

mysql c#.net dort wird anstelle des @ eine ? verwendet
 
Zuletzt bearbeitet:
Das funktioniert so nicht, weil p1 ja keine Variable an sich ist.
@p1 ist der Name des Parameters der zum SqlDataAdapter hinzugefügt wird.
So wie es bei dir oben geschrieben ist, erkennt der p1 nicht.

"@p1" ist nur der Name des Parameters der zum SqlDataAdapter hinzugefügt wird. Ich könnte den bestimmt auch "blubb" nennen. Nur in den tutorials etc. wird das immer so geschrieben.

EDIT: Ok ein @ muss definitiv davor..
 
Zuletzt bearbeitet:
schau halt nochmal den link von meinem obigen post an, wenn das auch nicht so sein sollte, dann vergiss meine unqualifizierte antwort schenll wieder ^^
 
tut mir leid, gespeicherte Prozeduren benutze ich nicht... ^^



EDIT:

Habs gelöst, auch wenn etwas unschön..
falls es interessiert:
Ich hab einen EventHandler an das DataGrid gehangen, der aufgerufen wird wenn man eine Taste auf dem DataGrid drückt und mindestens eine Zeile ausgewählt hat:
Code:
private void clientGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
            if (e.Key == Key.Delete && clientGrid.SelectedCells.Count > 0)
            {
                    IList  ic = clientGrid.SelectedItems;
                    foreach (DataRowView list in ic)
                    {
                       //ItemArray[1] = Spalte: "Company"                        
                       deletedClients.Add(list.Row.ItemArray[1].ToString());
                    }
             }
}

Beim Speichern werden dann die tables separat mit nem MySqlCommand gelöscht, unabhängig vom update() des MySqlDataAdapters.


Gruß,
Mossos.
 
Zuletzt bearbeitet:
Zurück
Oben