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()n

    1. SQL-String bauen
    2. Command erstellen
    3. Parameter definieren
    4. Prepare

    In 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");
    

Anmelden zum Antworten