Freigeben über


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:

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

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

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

  2. Nennen Sie das Projekt UpdateMultipleTablesWalkthrough.

  3. 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

  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. Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und klicken Sie auf Weiter.

  4. 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.

  5. Falls die Datenbank ein Kennwort erfordern sollte, aktivieren Sie die Option für die Einbeziehung vertraulicher Daten, und klicken Sie dann 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. 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

  1. Erweitern Sie im Datenquellenfenster den Knoten Customers.

  2. Ä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

  1. 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.

  2. 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

  1. Doppelklicken Sie auf dem BindingNavigator auf die Schaltfläche Speichern, um den Code-Editor für den bindingNavigatorSaveItem_Click-Ereignishandler zu öffnen.

  2. Ä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

  1. Drücken Sie F5.

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

  3. Klicken Sie auf die Schaltfläche Speichern.

  4. Ü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:

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