erfordert einen gültigen UpdateCommand ??



  • Hallo Leute

    Ich habe aus einer Mysql-tabelle mehrere Datatables erstellt

    da_e2 = new MySqlDataAdapter[iTitel]; // Atrray von DataAdaptern
     for (int i = 0; i < iTitel; i++)
     {
        strHeader = ds.Tables["Titel"].Rows[i][1].ToString(); /Tabellenname ermitteln
        da_e2[i] = new MySqlDataAdapter("Select Bezeichnung, Wert, Min, Max, Edit FROM einstellungen
                           WHERE Titel Like '" + strHeader + "'", conn);
        da_e2[i].Fill(ds, strHeader);
    }
    

    Diese werden dann in ein DataGridView angezeigt
    Klappt wunderbar
    Jetzt möchte ich die Änderungen speichern

    String strHeader = "";
     int j=0;
     int iTitel;;
     iTitel = ds.Tables["Titel"].Rows.Count;
     for (int i = 0; i < iTitel; i++)
     {
         strHeader = ds.Tables["Titel"].Rows[i][1].ToString();
         try
         {
             j += da_e2[i].Update(ds, strHeader);
         }
         catch (System.Exception ex)
         {
             MessageBox.Show(ex.Message);
         }
    
     }
      MessageBox.Show("Es wurden " + j.ToString() + " Einstellungen geändert und gesichert!");
    

    Dabei erhalte ich in den geänderten Tabellen folgende Fehlermeldung:

    Aktualisieren erfordert einen gültigen UpdateCommand, wenn eine DataRow- Auflistung mit modifizierten Zeilen weitergegeben wird.

    Ich weis nicht was ich jetzt damit anfangen soll ??
    Muss ich jetzt noch ein UpdateCommand einfügen ??

    Danke und Gruß
    Linus



  • Ja, musst du.
    Der Grund ist, dass nicht klar ist und auch nicht default vorgegeben werden kann,
    was bei einem ungültigen Update passieren soll.
    Deine DataAdapter-Daten sind ja nur lokal. Was soll also passieren, wenn jemand anders die Daten zwischen zeitlich geändert hat?
    Werden die einfach überschrieben, kriegst du einen Fehler,...?



  • Danke für die Antwort

    ich habe jetzt ein MysqlCommandBuilder davor eingesetzt

    String strHeader = "";
                MySqlCommandBuilder cmd_b;    // <<<<<<<<<<<             
                int j=0;
                int iTitel;;
                iTitel = ds.Tables["Titel"].Rows.Count;
                for (int i = 0; i < iTitel; i++)
                {
                    strHeader = ds.Tables["Titel"].Rows[i][1].ToString();
                    cmd_b = new MySqlCommandBuilder(da_e2[i]); //<<<<<<<<<<<<<<<
                    try
                    {
                        j += da_e2[i].Update(ds, strHeader);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
    
                }
    
                MessageBox.Show("Es wurden " + j.ToString() + " Einstellungen geändert und gesichert!");
    

    Jetzt funktioniert es und es werden auch die Anzahl der Änderungen
    korrekt angezeigt.

    Frage dazu noch:
    wird mit
    cmd_b = new MySqlCommandBuilder(da_e2[i]);
    das vorherige Objekt gelöscht oder muß ich muss
    ich es explizit noch löschen ??

    Danke und Gruß
    Linus



  • Was willst Du denn in C# löschen? Dafür gibt es den GC. Der wird die Builder-Objekte schon wegräumen.



  • Ok , danke , war mir nicht ganz sicher
    manchmal denke ich noch in c++ 😉



  • Guck einfach ob das Ding disposable ist. Wenn es disposable ist, solltest du es auch disposen.


Anmelden zum Antworten