Insert in Mysql
-
Hallo Leute
ich möchte gerne eine Reihe von Daten von einer Tabelle in eine andere übertragen.
Dabei benutze ich den Mysql Connector und wollte es wie folgt durchführen:reader = null; MySqlCommand cmd3; str = "INSERT INTO Tabelle2 (Art ,Jahr ,Mitglied)VALUES (?Art, ?Jahr, ?Mitglied)"; cmd3 = new MySqlCommand(str, conn); for (int i = 0; i < i_ind; i++) { cmd3.Parameters.AddWithValue("?Art", liste[i, 0]); cmd3.Parameters.AddWithValue("?Jahr", liste[i, 1]); cmd3.Parameters.AddWithValue("?Mitglied", liste[i, 2]); cmd3.Prepare(); cmd3.ExecuteNonQuery(); } MessageBox.Show("Fertig");
Dabei wurden die Daten aus Tabelle1 in das Array liste [i,0-2] gespeichert.
Wenn ich nur eine Zeile schreiben möchte funktioniert das wunderbar. Jedoch in einer For-Schleife bekomme ich eine Exception .Kann mir jemadn sagen wie das richtig geht?
Danke und Gruß
linus
-
Welche Exception bekommst du?
-
Er moniert , dass '?Art' schon definiert ist
-
Sorry , habs gefunden
MysqlCommand muß mit in dei for-schleife:reader = null; MySqlCommand cmd3; str = "INSERT INTO Tabelle2 (Art ,Jahr ,Mitglied)VALUES (?Art, ?Jahr, ?Mitglied)"; for (int i = 0; i < i_ind; i++) { cmd3 = new MySqlCommand(str, conn); cmd3.Parameters.AddWithValue("?Art", liste[i, 0]); cmd3.Parameters.AddWithValue("?Jahr", liste[i, 1]); cmd3.Parameters.AddWithValue("?Mitglied", liste[i, 2]); cmd3.Prepare(); cmd3.ExecuteNonQuery(); } MessageBox.Show("Fertig");
-
NEIN!!
Doch nicht jedesmal das Command erstellen und Prepare()n1. SQL-String bauen
2. Command erstellen
3. Parameter definieren
4. PrepareIn der Schleife:
{
5. Parameterarry befüllen
6. Abschicken mit Execute()
}Das ist doch gerade der Sinn bei Bulk Inserts, das nicht jedesmal das Statemment geparst werden muss. Dein Fehler liegt wahrscheinlich daran, dass Du die Parameternamen nur im SQL-String, nicht in der Parametererstellung markieren musst.
str = "INSERT INTO Tabelle2 (Art ,Jahr ,Mitglied)VALUES (?Art, ?Jahr, ?Mitglied)"; MySqlCommand cmd3 = new MySqlCommand(str, conn); cmd3.Parameters.Add("Art", <hier der Datentyp>); cmd3.Parameters.Add("Jahr", <hier der Datentyp>); cmd3.Parameters.Add("Mitglied", <hier der Datentyp>); cmd3.Prepare(); for (int i = 0; i < i_ind; i++) { cmd3.Parameters[0].Value(liste[i, 0]); cmd3.Parameters[1].Value(liste[i, 1]); cmd3.Parameters[2].Value(liste[i, 2]); cmd3.ExecuteNonQuery(); } MessageBox.Show("Fertig");