[C#] Geändertes DataSet in Datenbank speichern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von AlphaXenon, 20. August 2012 .

Schlagworte:
  1. 20. August 2012
    Geändertes DataSet in Datenbank speichern

    Bin nach wie vor an einem kleinen Projekt zu Gange und stehe mal wieder vor einem Datenbank-Problem

    Ich lade eine Access Datenbank in ein DataGridView und lasse mir dort die Daten anzeigen.
    Das Editieren der Daten ist aktiviert und ich kann auch fröhlich die Daten im GridView manipulieren.
    Nun möchte ich, dass die geänderten Daten in der Datenbank übernommen werden.

    Dazu habe ich einen Save Button mit folgendem Code:

    Code:
    private void button1_Click(object sender, EventArgs e)
     {
    
     try
     {
     test_DataSet.AcceptChanges();
    
     this.Validate();
     this.abfrage2BindingSource.EndEdit();
     this.abfrage2TableAdapter.Adapter.Update(test_DataSet);
     MessageBox.Show("Update successful");
     }
     catch (System.Exception ex)
     {
     MessageBox.Show("Update failed");
     }
    
    Im ersten Versuch kam auzsschließlich Update failed, was ich jetzt durch test_DataSet.AcceptChanges(); gelöst habe.
    Nun bekomme ich die Update successful Meldung angezeigt, allerdings werden die Daten nicht übernommen.
    Wenn ich die Daten erneut einlese, sind alle Änderungen verloren und die Datenbank im Projektverzeichnis wird auch nicht angerührt.

    2 Std googlen haben mir auch noch keine weitere Erkenntnis gebracht ^^'
     
  2. 20. August 2012
    AW: Geändertes DataSet in Datenbank speichern

    Ich denke, dass wir das Problem ohne deine Datenbankstruktur nicht so einfach lösen können. Es gibt ja direkte Abhänigkeiten die durch SQL erzeugt werden und ein schreiben verhindern könnten. Fremdschlüssel können z.B. unter Umständen ein Problem sein.
     
    1 Person gefällt das.
  3. 20. August 2012
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Geändertes DataSet in Datenbank speichern

    Ok, hier ist mal das komplette bisherige Projekt.
    Ist noch ziemliches Chaos im Code und ne Menge auskommentiert, aber wayne

    Download: Datenbanktool_blank.rar | www.xup.in

    Mein "Problemkind" findet man unter Formulare -> Datenbank editieren

    Erstellt wurde das Ganze mit MS Visual C# 2010 Express
     
  4. 20. August 2012
    Zuletzt bearbeitet: 20. August 2012
    AW: Geändertes DataSet in Datenbank speichern

    was mir beim vergleichen mit der msdn hilfe auffällt ist, dass du bei dem rot markierten noch gesondert auf den adapter zugreifst. wofür ist das gut, bzw muss das so sein? hab leider kein vs installiert.
     
  5. 20. August 2012
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Geändertes DataSet in Datenbank speichern

    hab ich mich auch schon gefragt, allerdings darf ich sonst den .Update Befehl nicht verwenden
    Spoiler
    Bild

    Edit\\ Na jetzt bin ich ja mal gespannt :>
     
  6. 20. August 2012
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Geändertes DataSet in Datenbank speichern

    Code:
     private void button1_Click(object sender, EventArgs e)
     {
    
     try
     {
     dATEN_DataSet.AcceptChanges();
     dATEN_DataSet.CaseSensitive = false;
     
     this.Validate();
     this.abfrage2BindingSource.EndEdit();
     
    [B] bool hasChanges = dATEN_DataSet.HasChanges();
     
     if (!hasChanges)
     {
     MessageBox.Show("No changes were made!");
     return;
     }[/B]
    
    [B] int updatedRows = this.abfrage2TableAdapter.Adapter.Update(dATEN_DataSet);
    
     MessageBox.Show("Update successful: " + updatedRows + " rows updated");[/B]
     }
     catch (System.Exception ex)
     {
     MessageBox.Show("Update failed");
     }
    
     }
    Habs mir gerade mal grob angeschaut und dir ein paar Ausgaben zum debuggen hinzugefügt. So was sollte man immer als erstes machen, wenn etwas nicht läuft. Einfach mal schauen was genau die Methoden die man da aufruft zurückgeben.

    Es scheint also so zu sein, dass schon vorher was schief läuft. Deine Komponenten bekommen gar nicht mit, dass im Table irgendetwas geändert wurde. Leider kenne ich mich mit .NET nicht so gut aus. Aber vielleicht hilft dir da ja schon mal weiter.

    Pack also mal den Code bei dir rein und teste ein bisschen.


    //Edit: ich komme deinem Problem langsam auf die Spur es liegt an deiner Datenbankstruktur, ich bau das mal eben ein bisschen um...

    //Edit²: Problem gelöst... packe das mal eben zusammen

    //Edit³: Hier:

    Ich habe einfach mal deine DB_edit.cs aufbauend auf diesem Tutorial (C# Tutorial - Binding a DataGridView to a Database - Tech.pro) umgebaut. Da bekam ich dann irgendwann folgenden Fehler:

    Was im Endeffekt, meine aller erste Vermutung bestätigt hat: deinen Tabellen fehlen Primärschlüssel. Diese werden aber scheinbar benötigt, damit man Updates durchführen kann.
    Diese hab ich dann in "Datenbanktool blank\bin\Debug\DATEN.accdb" zu beiden Tabellen hinzugefügt.

    Ansonsten habe ich die in der Datenbank angelegten Abfragen übergangen, da ich gerade keine Lust hatte mir das genau anzuschauen, aber du kannst einfach diesen String anpassen:

    Code:
    private static String query = "SELECT * FROM stamm2";
    (DB_edit.cs, Zeile 27)

    Des Weiteren lege ich dir ans Herz deinen Code ein wenig besser zu strukturieren, dann kann man dir schneller Helfen.

    Download: Datenbanktool_blank_fixed.rar | www.xup.in

    Ich habe allerdings alles was irgendwie mit dem "calc"-Ding bzw. den Excel Imports zu tun hatte deaktiviert bzw. auskommentiert, da mir die .dll fehlt. Du kannst das aber einfach wieder aktivieren.
     
  7. 20. August 2012
    AW: Geändertes DataSet in Datenbank speichern

    ich sag schon mal vielen dank
    werd mir das denk ich morgen auf der arbeit in alle ruhe ansehen, heute hab ich da keinen nerv mehr für

    ich werde das programm vermutlich sowieso nochmal von vorne aufziehen müssen, da recht viel code drin ist, der nicht benötigt wird und zunehmend verwirrt...

    aber ich bin auch noch blutiger anfänger, bin froh, dass ich "so weit" gekommen bin ^^'
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.