Verständnisproblem bei Löschabfragen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Schoofi.

    Verständnisproblem bei Löschabfragen

    Ich habe ein Verständnisproblem bei Löschabfragen.
    Ich möchte eine Datenbank in eine andere Datenbank importieren und die Zieldatenbank vorher leeren.
    dazu habe ich am Dataadapter folgende Löschabfrage angehängt "DELETE FROM `tbl_Suchbegriffe`"
    Wenn ich die Daten mit folgenden Befehlen löschen will, werden diese in der Datenbank gelöscht,bleiben aber paradoxerweise in der Datatable erhalten.

    VB.NET-Quellcode

    1. Private daSuchbegriffe As New dsInfodbTableAdapters.tbl_SuchbegriffeTableAdapter
    2. Public Sub DeleteSuchbegriffe()
    3. daSuchbegriffe.DeleteQuery()
    4. daSuchbegriffeupdate()
    5. End Sub

    Warum bleiben die Daten in der Datatable erhalten und wie bekomme ich sie auch da gelöscht ?
    weil eine DataTable keine Datenbank ist.

    Du kannst die DB mit einem Supermakt vergleichen, und das Dataset ist deine Einkaufstüte.
    Eine Query ist quasi ein Einkauf - es tut Dinge in deine Tüte.

    Nun mach den Supermakt dem Erdboden gleich - nachwievor sind deine zuvor gemachten Einkäufe in deiner Tüte - was hättest du denn gedacht?
    Lösch die Datensätze aus deiner DataTable - dann sind sie weg.
    Anschließend kann man die Db mit einem TableAdapter updaten - wenn man dem TableAdapter die DataTable gibt, wird er deren Löschungen an die Db senden - sie updaten halt.
    Dabei werden auch Änderungen der DataTable an die Db gesandt, und acuh Zufügungen.
    Die Db wird halt geupdated, deshalb heißt die Update()-Methode ja so.

    So ist das normal gedacht, und meist auch die beste Vorgehensweise.
    Du aber willst iwie was aussergewöhnliches machen, nämlich alle Datensätze aus der Db löschen.
    Dazu nimmt man ühaupt kein DataAdapter, sondern da bereitet man ein entsprechendes Command zu, und fährt es ab.

    Noch genereller kann gesagt werden, dass das meist keine gute Idee ist, von einer Db in die andere zu überspielen. Wieso meinst du, ist das in deim Falle nötig?
    Ich habe einiges für mein neues VB.net Programm an der Datenstruktur geändert. Die bisherige Datenbank wurde mit VB6 genutzt.
    So wie sich Programme weiterentwickeln, entstehen halt auch neue Erkenntnisse bei Datenbanken.
    Solange ich die neue Anwendung noch nicht fertig habe, kann sich aber am Dateninhalt der alten Datenbank noch was ändern.
    Zum Testen brauche ich aber auch schon die Originaldaten in der neuen Struktur, also brauche ich ein Importprogramm.

    Gibt es bessere Methoden eine Datatable zu leeren als eine Schleife die jeden Datensatz einzeln löscht ?
    Nachdem ich jetzt verstanden habe, das sich die Query unmittelbar auf die DB auswirkt, war es simpel.
    Die zu leerenden Tabellen per Query leeren und erst danach das Dataset füllen.
    Die neuen Grunddatentabellen sollen ja erhalten bleiben.