Exemplarische Vorgehensweise: Speichern von Daten in einer Datenbank (mehrere Tabellen)
Veröffentlicht: Juli 2016
Eines der häufigsten Szenarios in der Anwendungsentwicklung ist das Anzeigen von Daten auf einem Formular in einer Windows-Anwendung, das Bearbeiten der Daten und das Senden der aktualisierten Daten zurück an die Datenbank. In dieser exemplarischen Vorgehensweise wird ein Formular erstellt, in dem Daten aus zwei verknüpften Tabellen angezeigt werden. Darüber hinaus wird gezeigt, wie Datensätze bearbeitet und Änderungen wieder in der Datenbank gespeichert werden. In diesem Beispiel werden die Tabellen Customers
und Orders
aus der Beispieldatenbank Northwind verwendet.
Sie können Daten in der Anwendung wieder in der Datenbank speichern, indem Sie die Update
-Methode eines TableAdapter aufrufen. Wenn Sie Elemente aus dem Datenquellenfenster ziehen, wird Code zum Speichern von Daten automatisch für die erste auf einem Formular abgelegte Tabelle hinzugefügt. Für alle weiteren einem Formular hinzugefügten Tabellen muss der zum Speichern von Daten erforderliche Code manuell hinzugefügt werden. In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Code hinzugefügt wird, um Aktualisierungen aus mehreren Tabellen zu speichern.
Hinweis
Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Customizing Development Settings in Visual Studio.
In dieser exemplarischen Vorgehensweise werden u. a. folgende Aufgaben veranschaulicht:
Erstellen eines neuen Projekts vom Typ Windows-Anwendung.
Erstellen und Konfigurieren einer Datenquelle in der Anwendung mithilfe des Assistent zum Konfigurieren von Datenquellen.
Festlegen der Steuerelemente für die Elemente im Datenquellenfenster. Weitere Informationen finden Sie unter Festlegen des Steuerelements, das beim Ziehen aus dem Datenquellenfenster erstellt werden soll.
Erstellen datengebundener Steuerelemente durch Ziehen von Elementen aus dem Datenquellenfenster auf das Formular.
Ändern mehrerer Datensätze in den einzelnen Tabellen im Dataset.
Ändern von Code zum Zurücksenden der aktualisierten Daten des Datasets an die Datenbank.
Vorbereitungsmaßnahmen
Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
- Zugriff auf die Beispieldatenbank Northwind. Weitere Informationen finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.
Erstellen der Windows-Anwendung
Im ersten Schritt wird eine Windows-Anwendung erstellt. Zu diesem Zeitpunkt ist es nicht erforderlich, dem Projekt einen Namen zuzuweisen. Wir führen diesen Schritt dennoch aus, weil wir das Projekt später speichern möchten.
So erstellen Sie das neue Windows-Anwendungsprojekt
Erstellen Sie über das Menü Datei ein neues Projekt.
Nennen Sie das Projekt
UpdateMultipleTablesWalkthrough
.Wählen Sie Windows-Anwendung aus, und klicken Sie auf OK. Weitere Informationen finden Sie unter Clientanwendungen.
Das Projekt UpdateMultipleTablesWalkthrough wird erstellt und dem Projektmappen-Explorer hinzugefügt.
Erstellen der Datenquelle
In diesem Schritt wird mit dem Assistenten zum Konfigurieren von Datenquellen eine Datenquelle aus der Northwind-Datenbank erstellt. 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 die Datenquelle
Klicken Sie im Menü Daten auf Datenquellen anzeigen.
Wählen Sie im Datenquellenfenster die Option Neue Datenquelle hinzufügen aus, um den Assistenten zum Konfigurieren von Datenquellen zu starten.
Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und klicken Sie auf Weiter.
Führen Sie auf der Seite Wählen Sie Ihre Datenverbindung einen der folgenden Schritte aus:
Wenn in der Dropdownliste eine Datenverbindung zur Beispieldatenbank "Northwind" verfügbar ist, wählen Sie diese aus.
- oder -
Wählen Sie Neue Verbindung aus, um das Dialogfeld Verbindung hinzufügen/ändern zu öffnen.
Falls die Datenbank ein Kennwort erfordern sollte, aktivieren Sie die Option für die Einbeziehung vertraulicher Daten, und klicken Sie dann auf Weiter.
Klicken Sie auf der Seite Verbindungszeichenfolge in der Programmkonfigurationsdatei speichern auf Weiter.
Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen.
Wählen Sie die Tabellen Kunden und Bestellungen aus, und klicken Sie dann auf Fertig stellen.
NorthwindDataSet wird dem Projekt hinzugefügt. Die Tabellen werden im Datenquellenfenster angezeigt.
Festlegen der zu erstellenden Steuerelemente
In dieser exemplarischen Vorgehensweise befinden sich die Daten der Customers
-Tabelle in einem Details-Layout, in dem die Daten in einzelnen Steuerelementen angezeigt werden. Die Daten aus der Tabelle Orders
befinden sich in einem Rasterlayout, das in einem DataGridView-Steuerelement angezeigt wird.
So legen Sie den Ablagetyp für die Elemente im Datenquellenfenster fest
Erweitern Sie im Datenquellenfenster den Knoten Customers.
Ändern Sie das Steuerelement der Tabelle Customers in einzelne Steuerelemente, indem Sie Details in der Steuerelementliste des Knotens Customers auswählen. Weitere Informationen finden Sie unter Festlegen des Steuerelements, das beim Ziehen aus dem Datenquellenfenster erstellt werden soll.
Erstellen des datengebundenen Formulars
Sie können die datengebundenen Steuerelemente erstellen, indem Sie Elemente aus dem Datenquellenfenster auf das Formular ziehen.
So erstellen Sie datengebundene Steuerelemente auf dem Formular
Ziehen Sie den Hauptknoten Customers aus dem Datenquellenfenster auf Form1.
Auf dem Formular werden datengebundene Steuerelemente mit beschreibenden Bezeichnungen sowie ein Toolstrip (BindingNavigator) für die Navigation in den Datensätzen angezeigt. NorthwindDataSet, CustomersTableAdapter, BindingSource und BindingNavigator werden auf der Komponentenleiste angezeigt.
Ziehen Sie den Knoten Orders aus dem Datenquellenfenster in Form1.
Hinweis
Der verknüpfte Knoten Orders befindet sich unter der Spalte Fax und ist ein untergeordneter Knoten des Knotens Customers.
Auf dem Formular wird ein DataGridView-Steuerelement und ein Toolstrip (BindingNavigator) für die Navigation in den Datensätzen angezeigt. OrdersTableAdapter und BindingSource werden auf der Komponentenleiste angezeigt.
Hinzufügen von Code zum Aktualisieren der Datenbank
Sie können die Datenbank aktualisieren, indem Sie die Update
-Methoden der TableAdapters von Customers und Orders aufrufen. Ein Ereignishandler für die BindingNavigator-Schaltfläche Speichern wird standardmäßig zum Code des Formulars hinzugefügt, damit Aktualisierungen an die Datenbank gesendet werden. Mit dieser Prozedur wird der Code geändert und sichergestellt, dass Aktualisierungen in der richtigen Reihenfolge gesendet und mögliche Fehler der referenziellen Integrität verhindert werden. Mit dem Code wird außerdem die Fehlerbehandlung implementiert, indem der Aktualisierungsaufruf mit einem Try-Catch-Block umschlossen wird. Sie können den Code entsprechend den Anforderungen der Anwendung anpassen.
Hinweis
Aus Gründen der Übersichtlichkeit wird in dieser exemplarischen Vorgehensweise keine Transaktion verwendet. Wenn Sie jedoch zwei oder mehr verbundene Tabellen aktualisieren, müssen Sie die gesamte Aktualisierungslogik in eine Transaktion aufnehmen. Eine Transaktion ist ein Prozess, der sicherstellt, dass alle zugehörigen Änderungen an einer Datenbank erfolgreich sind, bevor ein Commit für eine der Änderungen ausgeführt wird. Weitere Informationen finden Sie unter Transaktionen und Parallelität.
So fügen Sie der Anwendung Aktualisierungslogik hinzu
Doppelklicken Sie auf dem BindingNavigator auf die Schaltfläche Speichern, um den Code-Editor für den
bindingNavigatorSaveItem_Click
-Ereignishandler zu öffnen.Ändern Sie den Code im Ereignishandler, sodass die
Update
-Methoden der verknüpften TableAdapters aufgerufen werden. Mit folgendem Code werden zunächst drei temporäre Datentabellen zum Speichern der aktualisierten Informationen für jeden DataRowState (Deleted, Added und Modified) erstellt. Anschließend werden die Aktualisierungen in der richtigen Reihenfolge vorgenommen. Der Code sollte wie folgt aussehen:this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { // Remove all deleted orders from the Orders table. if (deletedOrders != null) { ordersTableAdapter.Update(deletedOrders); } // Update the Customers table. customersTableAdapter.Update(northwindDataSet.Customers); // Add new orders to the Orders table. if (newOrders != null) { ordersTableAdapter.Update(newOrders); } // Update all modified Orders. if (modifiedOrders != null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch (System.Exception ex) { MessageBox.Show("Update failed"); } finally { if (deletedOrders != null) { deletedOrders.Dispose(); } if (newOrders != null) { newOrders.Dispose(); } if (modifiedOrders != null) { modifiedOrders.Dispose(); } }
Me.Validate() Me.OrdersBindingSource.EndEdit() Me.CustomersBindingSource.EndEdit() Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable) Dim newOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable) Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable) Try ' Remove all deleted orders from the Orders table. If Not deletedOrders Is Nothing Then OrdersTableAdapter.Update(deletedOrders) End If ' Update the Customers table. CustomersTableAdapter.Update(NorthwindDataSet.Customers) ' Add new orders to the Orders table. If Not newOrders Is Nothing Then OrdersTableAdapter.Update(newOrders) End If ' Update all modified Orders. If Not modifiedOrders Is Nothing Then OrdersTableAdapter.Update(modifiedOrders) End If NorthwindDataSet.AcceptChanges() Catch ex As Exception MsgBox("Update failed") Finally If Not deletedOrders Is Nothing Then deletedOrders.Dispose() End If If Not newOrders Is Nothing Then newOrders.Dispose() End If If Not modifiedOrders Is Nothing Then modifiedOrders.Dispose() End If End Try
Testen der Anwendung
So testen Sie die Anwendung
Drücken Sie F5.
Nehmen Sie in jeder Tabelle einige Änderungen an den Daten eines oder mehrerer Datensätze vor.
Klicken Sie auf die Schaltfläche Speichern.
Überprüfen Sie die Werte in der Datenbank, um sicherzustellen, dass die Änderungen gespeichert wurden.
Nächste Schritte
Je nach den Anforderungen der Anwendung können nach dem Erstellen eines datengebundenen Formulars in der Windows-Anwendung weitere Schritte sinnvoll sein. Sie können an dieser exemplarischen Vorgehensweise beispielsweise folgende Verbesserungen vornehmen:
Fügen Sie dem Formular Suchfunktionalität hinzu. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen einer parametrisierten Abfrage zu einem Formular in einer Windows Forms-Anwendung.
Bearbeiten der Datenquelle zum Hinzufügen oder Entfernen von Datenbankobjekten. Weitere Informationen finden Sie unter Gewusst wie: Bearbeiten eines Datasets.
Siehe auch
Exemplarische Vorgehensweisen zur Arbeit mit Daten
Binden von Windows Forms-Steuerelementen an Daten in Visual Studio
Übersicht über Datenanwendungen in Visual Studio
Herstellen von Datenverbindungen in Visual Studio
Vorbereiten der Anwendung auf den Empfang von Daten
Abrufen von Daten für die Anwendung
Binden von Steuerelementen an Daten in Visual Studio
Bearbeiten von Daten in der Anwendung
Überprüfen von Daten
Speichern von Daten