Announcement

Collapse
No announcement yet.

Problem mit MySqlDataAdapter (Update)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit MySqlDataAdapter (Update)

    Hallo,

    ich habe ein DataTable welches ich in meine MySql-Datenbanktabelle bringen möchte.
    Dazu habe ich auf mein MySqlDataAdapter, die Update-Methode der Klasse angewendet.

    commandZiel.CommandText = "SELECT * FROM beispiel";

    // Ziel-Tabellen-Adapter
    MySqlDataAdapter zielAdapter = new MySqlDataAdapter(commandZiel.CommandText, conn);

    // Definition des DataTable
    DataTable dataTable = new DataTable();

    // Ergebnis des SQL-Statements
    zielAdapter.Fill(dataTable);

    // Hier werden in dem dataTable Inhalte verändert

    // Update der Tabelle auf der Datenbank
    zielAdapter.Update(dataTable);


    Leider ändert die Update-Methode auf der Datenbank nichts.
    Habe ich da etwas vergessen? Ich kann mir das nicht erklären.

    Ich würde mich sehr freuen, wenn mir jemand einen Tipp geben könnte.

    Viele Grüße

    dotty

  • #2
    Würde sagen ein commit könnte fehlen -> transaction.Commit();
    Christian

    Comment


    • #3
      Vielen Dank, aber wie kann ich denn von meinem DataAdapter ausgehend den Commit() absetzen?
      Die Methode wird mir an dieser Stelle nicht angeboten. Oder wie ist das mit dem transaction.Commit() gemeint?

      Vielen Dank für die schnelle Antwort.

      dotty

      Comment


      • #4
        http://stackoverflow.com/questions/6...adapter-update
        Christian

        Comment


        • #5
          Hat dein DataAdapter überhaupt etwas anderes als den Select Command definiert? Ohne UpdateCommand auch kein Update. Nicht jeder DataAdapter generiert die anderen Commands automatisch. Ich kenne die MySql Version nicht aber üblicherweise gibt es eine Ableitung von DBCommandBuilder die hier dann wohl MySqlCommandBuilder heißen sollte durch die man den DataAdapter jagen kann um sich die Commands zu erzeugen.

          Comment


          • #6
            Hallo,

            vielen Dank für die guten Hinweise. Ich habe jetzt versucht die neuen Informationen in meinem Coding umzusetzen.
            Leider kommt es jetzt zu einer merkwürdigen Fehlermeldung: "DataTable beispiel kann nicht gefunden werden".

            Die Tabelle muss das System aber kenne, da der Select zur Ergebnistabelle ja durchgeführt wurde.

            Wie ist das möglich? Ich kann mir das nicht erklären.

            Hier mein ergänztes Coding:

            commandZiel.CommandText = "SELECT * FROM beispiel";

            // Ziel-Tabellen-Adapter
            MySqlDataAdapter zielAdapter = new MySqlDataAdapter();

            zielAdapter.SelectCommand = new MySqlCommand(commandZiel.CommandText, conn);

            MySqlCommandBuilder cb = new MySqlCommandBuilder(zielAdapter);

            DataSet zielTable = new DataSet();


            zielAdapter.Fill(zielTable);

            // Hier erfolgen die Änderungen

            try
            {

            string tabelle = "beispiel";
            zielAdapter.Update(zielTable, tabelle);

            }

            catch (SystemExeption ex)
            {
            Console.WriteLine(ex.ToString());
            }

            Comment


            • #7
              Benutz kein DataSet sondern einfach nur eine DataTable. Der Name bezieht sich auf den Namen der erstellten DataTable im DataSet es gibt keinen Zusammenhang zum im Sql verwendeten Tabellennamen (da müßte ja auch nicht nur eine Tabelle beteiligt sein).

              Bei deinem Aufruf von Adapter.Update sucht er nun eine DataTable mit Namen beispiel im DataSet du hast aber vorher einfach Adapter.Fill aufgerufen ohne Namen, heißt er erstellt eine DataTable im DataSet und würfelt einen Namen. Thoretisch könnte er versuchen den aus dem SelectCommand zu generieren aber ich vermute er nimmt einfach irgendwas als generischen Namen zum Beispiel einfach 'Table'. So würde es zumindest der DataAdapter für den SqlServer machen. Du könntest also auch beim Adapter.Fill einen Namen für die DataTable mitgeben aber einfach nur eine DataTable verwenden ist sinnvoller. Warum ein DataSet verwenden wenn man da eh nur eine DataTable reinpackt.

              Comment


              • #8
                Ich bitte um Entschuldigung, dass ich noch einmal dumm nachfragen muss. Aber leider habe ich keine Idee mehr. Ich habe jetzt das DataTable direkt verwendet:

                commandZiel.CommandText = "SELECT * FROM beispiel";

                // Ziel-Tabellen-Adapter
                MySqlDataAdapter zielAdapter = new MySqlDataAdapter();

                zielAdapter.SelectCommand = new MySqlCommand(commandZiel.CommandText, conn);

                MySqlCommandBuilder cb = new MySqlCommandBuilder(zielAdapter);

                DataTable zielTable = new DataTable();


                zielAdapter.Fill(zielTable);

                // Hier erfolgen die Änderungen

                try
                {


                zielAdapter.Update(zielTable);

                }

                catch (SystemExeption ex)
                {
                Console.WriteLine(ex.ToString());
                }


                Jetzt kommt es zwar zu keinen Fehlermeldungen mehr, aber das Update wird nicht auf der Datenbank durchgeführt.

                Habe ich noch etwas vergessen?

                Comment


                • #9
                  Nö sieht für mich so aus als wäre alles da was man so braucht. Hast du dir mal im Debugger den zielAdapter angesehen. Sind die Commands mit sinnvollen Commands gefüllt?

                  Einmal so wie ich mir vorstelle wie das aussehen sollte.
                  [HIGHLIGHT=C#]
                  DataTable zielTable = new DataTable();

                  //lesen
                  using (var con = new MySqlConnection("meinLieberConnectionString"))
                  {
                  con.Open();
                  using (var zielAdapter = new MySqlDataAdapter("SELECT * FROM beispiel", con))
                  {
                  zielAdapter.Fill(zielTable);
                  }
                  }

                  // editieren

                  // schreiben
                  using (var con = new MySqlConnection("meinLieberConnectionString"))
                  {
                  con.Open();
                  using (var zielAdapter = new MySqlDataAdapter("SELECT * FROM beispiel", con))
                  {
                  using (var cb = new MySqlCommandBuilder(zielAdapter))
                  {
                  zielAdapter.Update(zielTable);
                  }
                  }
                  }
                  [/HIGHLIGHT]

                  Comment


                  • #10
                    Hallo,

                    ich möchte mich noch einmal für die freundliche Hilfe bedanken.
                    Ich konnte mein Problem inzwischen lösen.

                    Leider waren meine Commands im zielAdapter nicht richtig gefüllt.
                    Nachdem ich das Update-Statement neue definiert hatte funktionierte das Programm dann auch.

                    Noch einmal vielen Dank für die freundliche Unterstützung

                    dotty

                    Comment

                    Working...
                    X