Exemplarische Vorgehensweise: Speichern von Daten in einer Datenbank (mehrere Tabellen)
Aktualisiert: November 2007
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 verwendeten Version, können die angezeigten Dialogfelder und Menübefehle von den in der Hilfe beschriebenen abweichen. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen. |
Zu den Aufgaben in dieser exemplarischen Vorgehensweise gehören:
Erstellen eines neuen Windows-Anwendung-Projekts.
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 Gewusst wie: 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 im 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 Erstellen von Windows-basierten Anwendungen.
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 dann auf Weiter.
Führen Sie auf der Seite Wählen Sie Ihre Datenverbindung aus einen der folgenden Schritte aus:
Wenn eine Datenverbindung zur Beispieldatenbank Northwind in der Dropdownliste verfügbar ist, wählen Sie sie aus.
– oder –
Wählen Sie Neue Verbindung aus, um das Dialogfeld Verbindung hinzufügen/ändern zu öffnen. Weitere Informationen finden Sie unter Dialogfeld "Verbindung hinzufügen/ändern" (Allgemein).
Wenn für die Datenbank ein Kennwort erforderlich ist, 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 Customers und Orders aus, und klicken Sie 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 Gewusst wie: 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 im Komponentenfach 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 im Komponentenfach 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 in einen Try-Catch-Block eingefügt 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 (ADO.NET). |
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:
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
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(); } }
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-Anwendung.
Bearbeiten der Datenquelle zum Hinzufügen oder Entfernen von Datenbankobjekten. Weitere Informationen finden Sie unter Gewusst wie: Bearbeiten eines Datasets.
Siehe auch
Konzepte
Übersicht über das Anzeigen von Daten
Weitere Ressourcen
Exemplarische Vorgehensweisen zur Arbeit mit Daten
Erste Schritte mit dem Datenzugriff
Herstellen von Datenverbindungen in Visual Studio
Vorbereiten der Anwendung auf den Empfang von Daten
Abrufen von Daten für die Anwendung
Anzeigen von Daten in Formularen in Windows-Anwendungen