Freigeben über


Exemplarische Vorgehensweise: Speichern von Daten aus verknüpften Datentabellen (Hierarchische Aktualisierung)

Die Daten in einer Anwendung wieder in der Datenbank zu speichern ist relativ einfach, wenn man mit einer einzelnen Datentabelle und keine Fremdschlüsseleinschränkungen arbeitet, die berücksichtigt werden müssen. Doch wenn Daten aus einem Dataset gespeichert werden sollen, das zwei oder mehr verknüpfte Tabellen enthält, müssen Sie die Änderungen an die Datenbank in einer spezifischen Reihenfolge senden, sodass die Einschränkungen nicht verletzt werden. Sie können beim Aktualisieren verknüpfter Daten in verknüpften Tabellen die programmgesteuerte Logik bereitstellen, mit der spezifische Teilmengen der Daten aus jeder Datentabelle extrahiert werden und die Aktualisierungen in der richtigen Reihenfolge an die Datenbank senden. Sie können auch die Komponente TableAdapterManager nutzen.

Diese exemplarische Vorgehensweise zeigt, wie Sie die verknüpften Daten mithilfe der Komponente TableAdapterManager speichern. Weitere Informationen über die manuelle Codierung verknüpfter Datentabellenaktualisierungen finden Sie unter Exemplarische Vorgehensweise: Speichern von Daten in einer Datenbank (mehrere Tabellen).

Vorbereitungsmaßnahmen

Um diese exemplarische Vorgehensweise nachzuvollziehen, benötigen Sie Folgendes:

Erstellen der Windows-basierten Anwendung

Im ersten Schritt in dieser exemplarischen Vorgehensweise wird eine Windows-basierte Anwendung erstellt.

So erstellen Sie eine neue Windows-basierte Anwendung

  1. Erstellen Sie über das Menü Datei ein neues Projekt.

    Hinweis

    Hierarchische Aktualisierung wird in Visual Basic- und Visual C#-Projekten unterstützt. Erstellen Sie das Projekt deshalb in einer dieser Sprachen.

  2. Geben Sie dem Projekt den Namen HierarchicalUpdateWalkthrough.

  3. Wählen Sie Windows Forms-Anwendung aus, und klicken Sie auf OK. Weitere Informationen finden Sie unter Entwickeln von Clientanwendungen mit .NET Framework.

    Das Projekt HierarchicalUpdateWalkthrough wird erstellt und zum Projektmappen-Explorer hinzugefügt.

Erstellen des DataSets

Weil Sie zugehörige Tabellen zur Demonstration hierarchischer Aktualisierungen benötigen, werden wir im nächsten Schritt ein Dataset erstellen, das die Tabellen Customers und Orders aus der Datenbank Northwind enthält. Erstellen des DataSets mithilfe des Assistenten zum Konfigurieren von Datenquellen. Sie benötigen Zugriff auf die Beispieldatenbank Northwind, um die Verbindung herstellen zu können. Informationen zum Einrichten der Beispieldatenbank Northwind finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.

So erstellen Sie das DataSet

  1. Klicken Sie im Menü Daten auf Datenquellen anzeigen.

  2. Wählen Sie im Datenquellenfenster die Option Neue Datenquelle hinzufügen aus, um den Assistenten zum Konfigurieren von Datenquellen zu starten.

  3. Klicken Sie auf der Seite Datenquellentyp auswählen auf Datenbank und anschließend auf Weiter.

  4. Führen Sie auf der Seite Wählen Sie Ihre Datenverbindung eine der folgenden Aktionen aus:

    • Wenn im Dropdown-Listenfeld eine Datenverbindung zur Beispieldatenbank Northwind verfügbar ist, klicken Sie auf diese.

      - oder -

    • Klicken Sie Neue Verbindung, um das Dialogfeld Verbindung hinzufügen/ändern zu öffnen.

  5. Sollte für die Datenbank ein Kennwort erforderlich sein, wählen Sie die Option für die Einbeziehung vertraulicher Daten aus, und klicken Sie anschließend auf Weiter.

  6. Klicken Sie auf der Seite Verbindungszeichenfolge in der Programmkonfigurationsdatei speichern auf Weiter.

  7. Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen.

  8. Aktivieren Sie die Kontrollkästchen für die Tabellen Customers und Orders, und klicken Sie dann auf Fertig stellen.

    Das NorthwindDataSet wird erstellt und die beiden Tabellen werden im Datenquellenfenster angezeigt.

Ändern der zu erstellenden standardmäßigen datengebundenen Steuerelemente

Nachdem das Datenquellenfenster gefüllt wurde, können Sie die zu erstellenden Steuerelemente wählen, wenn Sie Elemente in ein Windows Form ziehen. In dieser exemplarischen Vorgehensweise werden die Daten der Tabelle Customers in einzelnen Steuerelementen (Details) dargestellt. Die Daten aus der Tabelle Orders werden in einem DataGridView-Steuerelement (DataGridView) angezeigt.

So legen Sie das Steuerelement für die Elemente im Datenquellenfenster fest

  1. Erweitern Sie im Datenquellenfenster den Knoten Customers.

  2. Ändern Sie die zu erstellenden Steuerelemente für die Tabelle Customers in einzelne Steuerelemente, indem Sie Details in der Steuerungsliste des Knotens Customers anklicken. Weitere Informationen finden Sie unter Gewusst wie: Festlegen des Steuerelements, das beim Ziehen aus dem Datenquellenfenster erstellt werden soll.

    Hinweis

    Die Tabelle Orders verwendet das standardmäßige Steuerelement, DataGridView.

Erstellen des datengebundenen Formulars

Nachdem Sie die Steuerelemente im Datenquellenfenster ausgewählt haben, erstellen Sie die datengebundenen Steuerelemente, indem Sie Elemente auf das Formular ziehen.

So erstellen Sie datengebundene Steuerelemente für die Daten Customers und Orders

  1. Ziehen Sie den Hauptknoten Customers aus dem Datenquellenfenster auf Form1.

    Datengebundene Steuerelemente mit beschreibende Bezeichnungen werden auf dem Formular zusammen mit einer TableAdapterManager-Komponente angezeigt, einer Symbolleiste (BindingNavigator) für das Navigieren in Datensätzen. Es wird ein typisiertes Dataset, TableAdapter, bz9tthwx(v=vs.140).md sowie eine BindingSource auf der Komponentenleiste angezeigt.

  2. Ziehen Sie den Knoten Orders aus dem Datenquellenfenster in Form1.

    Hinweis

    Der zugehörige Knoten Orders befindet sich unter dem Knoten Fax der Tabelle Customers und ist ein untergeordneter Knoten des Knotens Customers.Der Knoten Orders, der als Peer des Knotens Customers angezeigt wird, zeigt alle Bestellungen in der Tabelle.Der Knoten Orders, der als untergeordneter Knoten der Knotens Customers dargestellt wird, stellt die zugehörigen Bestellungen dar.

    Ein DataGridView-Steuerelement und eine Symbolleiste (BindingNavigator) für das Navigieren durch Datensätzen werden auf dem Formular angezeigt. Es werden ein TableAdapter sowie eine BindingSource auf der Komponentenleiste angezeigt.

Den generierten Speichern-Code ändern, sodass die hierarchischen Aktualisierung durchgeführt wird

Speichern Sie die Änderungen der verknüpften Tabellen im Dataset in der Datenbank, indem Sie die Methode TableAdapterManager.UpdateAll aufrufen und den Namen des Datasets übergeben, der die verknüpften Tabellen enthält. Führen Sie zum Beispiel die Methode TableAdapterManager.UpdateAll(NorthwindDataset) aus, um Aktualisierungen von allen Tabellen im NorthwindDataset zur Back-End-Datenbank zu senden.

Nachdem Sie die Elemente aus dem Datenquellenfenster abgelegt haben, wird der Code automatisch dem Form_Load-Ereignis für das Füllen jeder Tabelle hinzugefügt (den TableAdapter.Fill-Methoden). Es wird auch Code zum Click-Ereignis der Schaltfläche Speichern des BindingNavigator hinzugefügt, sodass die Daten des Datasets wieder in der Datenbank gespeichert werden (der TableAdapterManager.UpdateAll-Methode).

Der generierte Speichern-Code enthält eine Codezeile, die die Methode CustomersBindingSource.EndEdit aufruft. Genauer gesagt ruft er die Methode EndEdit der ersten BindingSource auf, die dem Formular hinzugefügt wurde. Anders ausgedrückt: Dieser Code wird nur für die erste Tabelle erzeugt, die vom Datenquellenfenster auf das Formular gezogen wird. Der Aufruf EndEdit führt ein Commit aller Änderungen durch, die in irgendeinem datengebundenen Steuerelement ablaufen, das derzeit bearbeitet wird. Wenn also ein datengebundenes Steuerelement noch einen Fokus hat und Sie klicken die Schaltfläche Speichern, wird ein Commit für alle ausstehenden Bearbeitungen in diesem Steuerelements vor dem eigentlichen Speichern durchgeführt (die TableAdapterManager.UpdateAll-Methode).

Hinweis

Der Designer fügt den BindingSource.EndEdit-Code nur für die erste Tabelle ein, die auf das Formular gezogen wird.Sie müssen deshalb eine Codezeile zum Aufruf der BindingSource.EndEdit-Methode für jede verknüpfte Tabelle auf dem Formular hinzufügen.Für diese exemplarische Vorgehensweise heißt das, dass Sie einen Aufruf zur OrdersBindingSource.EndEdit-Methode hinzufügen müssen.

So aktualisieren Sie den Code für einen Commit der Änderungen zu den verknüpften Tabellen vor dem Speichern

  1. Doppelklicken Sie die Schaltfläche Speichern auf dem BindingNavigator, um Form1 im Code-Editor zu speichern.

  2. Fügen Sie eine Codezeile ein, um die OrdersBindingSource.EndEdit-Methode nach der Zeile aufzurufen, die die CustomersBindingSource.EndEdit-Methode aufruft. Der Code im Click-Ereignis Speichern sollte etwa folgendermaßen aussehen:

    Me.Validate()
    Me.CustomersBindingSource.EndEdit()
    Me.OrdersBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet)
    
    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Neben dem Commit für Änderungen an einer verknüpften untergeordneten Tabelle vor dem Speichern in einer Datenbank müssen Sie vielleicht einen einen Commit der neue erstellten übergeordneten Datensätze durchführen, ehe Sie neue untergeordnete Datensätze dem Dataset hinzufügen. Anders ausgedrückt müssen Sie möglicherweise den neuen übergeordneten Datensatz (Customer) dem Dataset hinzufügen, ehe es die Fremdschlüsseleinschränkungen ermöglichen, dass dem Dataset neue untergeordnete Datensätze (Bestellungen) hinzugefügt werden können. Das erreichen Sie, indem Sie das untergeordnete BindingSource.AddingNew-Ereignis verwenden.

Hinweis

Möglicherweise müssen Sie ein Commit übergeordneter Datensätze durchführen, vielleicht aber auch nicht; das hängt von der Art von Steuerelement ab, das für das Binden an die Datenquelle verwendet wird.In dieser exemplarischen Vorgehensweise verwenden Sie einzelne Steuerelemente für das Binden an die übergeordnete Tabelle; das erfordert zusätzlichen Code für den Commit des neuen übergeordneten Datensatzes.Wenn die übergeordneten Datensätze in einem komplexen Bindungssteuerelement wie der DataGridView angezeigt werden, wäre dieser zusätzlichen´EndEdit-Aufruf für den übergeordneten Datensatz nicht nötig.Das liegt daran, dass die zugrunde liegende Datenbindungsfunktion des Steuerelements den Commit neuer Datensätze übernimmt.

So fügen Sie Code für den Commit übergeordneter Datensätze hinzu, ehe untergeordnete Datensätze hinzufügt werden

  1. Erstellen Sie einen Ereignishandler für das OrdersBindingSource.AddingNew-Ereignis.

    • Öffnen Sie Form1 in der Entwurfsansicht, klicken Sie OrdersBindingSource in der Komponentenleiste, wählen Sie Ereignisse im Fenster Eigenschaften und doppelklicken Sie dann auf das Ereignis AddingNew.
  2. Fügen Sie dem Ereignishandler eine Codezeile hinzu, die die Methode CustomersBindingSource.EndEdit aufruft. Der Code im Ereignis OrdersBindingSource_AddingNew sollte etwa folgendermaßen aussehen:

    Me.CustomersBindingSource.EndEdit()
    
    this.customersBindingSource.EndEdit();
    

Überprüfen, dass die hierarchische Aktualisierung aktiviert ist

Die hierarchische Aktualisierung wird durch Festlegen der Eigenschaft Hierarchische Aktualisierung des Datasets an- bzw. abgeschaltet. Die hierarchische Aktualisierung ist standardmäßig aktiviert, weshalb Sie in dieser exemplarischen Vorgehensweise den Wert der Eigenschaft Hierarchische Aktualisierung nicht ändern müssen.

So überprüfen Sie, ob hierarchischen Aktualisierung aktiviert ist

  1. Öffnen Sie das Dataset im DataSet-Designer, indem Sie im Projektmappen-Explorer auf die Datei NorthwindDataSet.xsd doppelklicken.

  2. Wählen Sie auf der Entwurfsoberfläche einen leeren Bereich aus.

  3. Finden Sie die Eigenschaft Hierarchische Aktualisierung in den Eigenschaftenfenster und stellen Sie sicher, dass sie auf True eingestellt ist.

    Hinweis

    Die Eigenschaft Hierarchische Aktualisierung steuert, ob der Code mit einem TableAdapterManager generiert wird sowie die Logik für das Durchführen oder Unterlassen hierarchischer Aktualisierungen.Wird Hierarchische Aktualisierung auf True festgelegt, wird ein TableAdapterManager generiert; ist Hierarchische Aktualisierung auf False festgelegt, wird kein TableAdapterManager generiert.

Testen der Anwendung

So testen Sie die Anwendung

  1. Drücken Sie F5.

  2. Nehmen Sie in jeder Tabelle einige Änderungen an den Daten eines oder mehrerer Datensätze vor.

  3. Fügen Sie einen neuen Kunden hinzu und dann eine neue Bestellung für diesen Kunden.

  4. Klicken Sie auf die Schaltfläche Speichern. Der TableAdapterManager übernimmt die erforderliche Logik für alle verknüpfte Aktualisierungen.

  5. Überprüfen Sie die Werte in der Daten und stellen Sie sicher, dass die Änderungen in jeder Tabelle gespeichert wurden.

Nächste Schritte

Abhängig von den Anforderungen Ihrer Anwendung können nach dem Speichern der verknüpften Daten in der Windows-Anwendung weitere Schritte sinnvoll sein. Hier sind einige Verbesserungen, die Sie an dieser Anwendung vornehmen können:

  • Hinzufügen einer dritten Tabelle wie etwa der Tabelle OrderDetails sowie das Experimentieren mit einer Drei-Tabellen-Hierarchie.

  • Hinzufügen von Validierungscode um sicherzustellen, dass Daten den Anwendungsanforderungen neben den Datenbankeinschränkungen entsprechen. Weitere Informationen finden Sie unter Überprüfen von Daten.

Siehe auch

Aufgaben

Gewusst wie: Konfigurieren von Fremdschlüsseleinschränkungen in einem DataSet

Gewusst wie: Festlegen der Reihenfolge beim Durchführen einer hierarchischen Aktualisierung

Gewusst wie: Ausführen eines Commits für aktuelle Bearbeitungen von datengebundenen Steuerelementen vor dem Speichern von Daten

Gewusst wie: Implementieren der hierarchischen Aktualisierung in vorhandenen Visual Studio-Projekten

Exemplarische Vorgehensweise: Speichern von Daten aus verknüpften Datentabellen (Hierarchische Aktualisierung)

Konzepte

Speichern von Daten

Weitere Ressourcen

Hierarchische Aktualisierung

DataSets, DataTables und DataViews