Share via


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:

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 im 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 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

  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 dann auf Weiter.

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

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

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

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

  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 im Komponentenfach 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 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

  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:

    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

  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

Konzepte

Neue Datenfeatures

Ü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

Bearbeiten von Daten in der Anwendung

Überprüfen von Daten

Speichern von Daten