Freigeben über


Speichern von Daten in einer Datenbank (mehrere Tabellen) in .NET Framework-Anwendungen

Hinweis

Die DataSet Klassen und verwandten Klassen sind ältere .NET Framework-Technologien aus den frühen 2000er Jahren, mit denen Anwendungen mit Daten im Arbeitsspeicher arbeiten können, während die Apps von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Apps, mit denen Benutzer Daten ändern und die Änderungen wieder in der Datenbank speichern können. Obwohl Datasets eine bewährte erfolgreiche Technologie sind, ist der empfohlene Ansatz für neue .NET-Anwendungen die Verwendung von Entity Framework Core. Entity Framework bietet eine natürlichere Möglichkeit zum Arbeiten mit tabellarischen Daten als Objektmodelle und verfügt über eine einfachere Programmierschnittstelle.

Eines der häufigsten Szenarien bei der Anwendungsentwicklung besteht darin, Daten in einem Formular in einer Windows-Anwendung anzuzeigen, die Daten zu bearbeiten und die aktualisierten Daten zurück an die Datenbank zu senden. Diese exemplarische Vorgehensweise erstellt ein Formular, das Daten aus zwei verknüpften Tabellen anzeigt und zeigt, wie Datensätze bearbeitet und Änderungen wieder in der Datenbank gespeichert werden. In diesem Beispiel werden die Tabellen Customers und Orders aus der Northwind-Beispieldatenbank verwendet.

Sie können Daten in Ihrer Anwendung wieder in der Datenbank speichern, indem Sie die Update Methode eines TableAdapter aufrufen. Wenn Sie Tabellen aus dem Fenster "Datenquellen " in ein Formular ziehen, wird der code, der zum Speichern von Daten erforderlich ist, automatisch hinzugefügt. Alle zusätzlichen Tabellen, die einem Formular hinzugefügt werden, erfordern das manuelle Hinzufügen dieses Codes. In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie Code hinzufügen, um Aktualisierungen aus mehreren Tabellen zu speichern.

In dieser exemplarischen Vorgehensweise werden u. a. folgende Aufgaben veranschaulicht:

Voraussetzungen

Um dieses Lernprogramm abzuschließen, benötigen Sie die in Visual Studio installierten Workloads für .NET-Desktopentwicklung und Datenspeicherung und -verarbeitung. Um sie zu installieren, öffnen Sie Visual Studio Installer, und wählen Sie Ändern (oder Mehr>Ändern) neben der Version von Visual Studio aus, die Sie ändern möchten. Weitere Informationen finden Sie im Artikel Ändern von Visual Studio durch Hinzufügen oder Entfernen von Arbeitsauslastungen und Komponenten.

In dieser exemplarischen Vorgehensweise wird SQL Server Express LocalDB und die Northwind-Beispieldatenbank verwendet.

  1. Wenn Sie nicht über SQL Server Express LocalDB verfügen, installieren Sie sie entweder über die SQL Server Express-Downloadseite oder über das Visual Studio-Installationsprogramm. Im Visual Studio Installerkönnen Sie SQL Server Express LocalDB als Teil der Datenspeicher und Verarbeitung Workload oder als einzelne Komponente installieren.

  2. Installieren Sie die Northwind-Beispieldatenbank, indem Sie die folgenden Schritte ausführen:

    1. Öffnen Sie in Visual Studio das fenster SQL Server-Objekt-Explorer. (SQL Server-Objekt-Explorer wird als Teil der Datenspeicherungs- und Verarbeitungsauslastung im Visual Studio Installer installiert.) Erweitern Sie den SQL Server-Knoten . Klicken Sie mit der rechten Maustaste auf Ihre LocalDB-Instanz, und wählen Sie neue Abfrageaus.

      Ein Abfrage-Editor-Fenster wird geöffnet.

    2. Kopieren Sie das Northwind-Transact-SQL Skript in die Zwischenablage. Dieses T-SQL-Skript erstellt die Northwind-Datenbank von Grund auf neu und füllt sie mit Daten auf.

    3. Fügen Sie das T-SQL-Skript in den Abfrage-Editor ein, und wählen Sie dann die Schaltfläche Ausführen aus.

      Nach kurzer Zeit wird die Ausführung der Abfrage abgeschlossen, und die Northwind-Datenbank wird erstellt.

Erstellen der Windows Forms-Anwendung

Erstellen Sie ein neues Windows Forms-App-Projekt für C# oder Visual Basic. Nennen Sie das Projekt "UpdateMultipleTablesWalkthrough".

Die Datenquelle erstellen

In diesem Schritt wird eine Datenquelle aus der Northwind-Datenbank mithilfe des Datenquellenkonfigurations-Assistenten erstellt. Sie müssen Zugriff auf die Northwind-Beispieldatenbank haben, um die Verbindung zu erstellen. Informationen zum Einrichten der Northwind-Beispieldatenbank finden Sie unter How to: Install sample databases.

  1. Wählen Sie im Menü "Daten " die Option "Datenquellen anzeigen" aus.

    Das Fenster "Datenquellen " wird geöffnet.

  2. Wählen Sie im Fenster "Datenquellen " die Option "Neue Datenquelle hinzufügen " aus, um den Assistenten für die Datenquellenkonfiguration zu starten.

  3. Wählen Sie auf dem Bildschirm " Datenquellentyp auswählen " die Option "Datenbank" und dann "Weiter" aus.

  4. Führen Sie auf dem Bildschirm " Datenverbindung auswählen " eine der folgenden Aktionen aus:

    • Wenn eine Datenverbindung mit der Northwind-Beispieldatenbank 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.

  5. Wenn Ihre Datenbank ein Kennwort erfordert, wählen Sie die Option aus, vertrauliche Daten einzuschließen, und wählen Sie dann "Weiter" aus.

  6. Wählen Sie auf der Seite Verbindungszeichenfolge in der Anwendungskonfigurationsdatei speichern die Option Weiter aus.

  7. Erweitern Sie auf dem Bildschirm "Datenbankobjekte auswählen " den Knoten "Tabellen ".

  8. Wählen Sie die Tabellen "Kunden " und " Bestellungen " und dann " Fertig stellen" aus.

    Das NorthwindDataSet wird Ihrem Projekt hinzugefügt, und die Tabellen werden im Fenster "Datenquellen " angezeigt.

Festlegen der zu erstellenden Steuerelemente

Für diese Schritt-für-Schritt-Anleitung befinden sich die Daten in der Customers Tabelle in einem Detaillayout, in dem die Daten in einzelnen Steuerelementen angezeigt werden. Die Daten aus der Orders Tabelle befinden sich in einem Rasterlayout , das in einem DataGridView Steuerelement angezeigt wird.

So legen Sie den Droptyp für die Elemente im Fenster "Datenquellen" fest

  1. Erweitern Sie im Fenster "Datenquellen " den Knoten " Kunden ".

  2. Wählen Sie im Knoten "Kunden " die Option "Details " aus der Steuerelementliste aus, um das Steuerelement der Tabelle " Kunden " in einzelne Steuerelemente zu ändern. 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 Ihr Formular ziehen.

  1. Ziehen Sie den Hauptknoten "Kunden " aus dem Fenster "Datenquellen " auf "Form1".

    Datengebundene Steuerelemente mit beschreibenden Beschriftungen werden auf dem Formular zusammen mit einer Toolleiste (BindingNavigator) zum Navigieren in Datensätzen angezeigt. Ein NorthwindDataSet, CustomersTableAdapter, BindingSource und BindingNavigator werden im Komponentenbereich angezeigt.

  2. Ziehen Sie den zugehörigen Knoten "Bestellungen " aus dem Fenster "Datenquellen " auf "Formular1".

    Hinweis

    Der zugehörige Knoten "Orders" befindet sich unterhalb der Spalte "Fax " und ist ein untergeordneter Knoten des Knotens " Kunden ".

    Ein DataGridView Steuerelement und eine Toolleiste (BindingNavigator) für die Navigation in Datensätzen werden im Formular angezeigt. Ein OrdersTableAdapter und BindingSource werden in der Komponentenleiste angezeigt.

Hinzufügen von Code zum Aktualisieren der Datenbank

Sie können die Datenbank aktualisieren, indem Sie die Update Methoden der Customers - und Orders TableAdapters aufrufen. Standardmäßig wird dem Code des Formulars ein Ereignishandler für die Schaltfläche " Speichern "BindingNavigator hinzugefügt, um Aktualisierungen an die Datenbank zu senden. Mit diesem Verfahren wird der Code so geändert, dass Aktualisierungen in der richtigen Reihenfolge gesendet werden. Dadurch wird die Möglichkeit beseitigt, referenzielle Integritätsfehler zu beheben. Der Code implementiert auch die Fehlerbehandlung, indem der Updateaufruf in einen Try-Catch-Block eingeschlossen wird. Sie können den Code entsprechend den Anforderungen Ihrer Anwendung ändern.

Hinweis

Aus Gründen der Übersichtlichkeit verwendet diese Anleitung keine Transaktion. Wenn Sie jedoch zwei oder mehr verwandte Tabellen aktualisieren, schließen Sie alle Aktualisierungslogik in eine Transaktion ein. Eine Transaktion ist ein Prozess, der sicherstellt, dass alle zugehörigen Änderungen an einer Datenbank erfolgreich sind, bevor Änderungen übernommen werden. Weitere Informationen finden Sie unter Transaktionen und Parallelität.

So fügen Sie der Anwendung Aktualisierungslogik hinzu

  1. Wählen Sie die Schaltfläche Speichern auf BindingNavigator. Dadurch wird der Code-Editor für den bindingNavigatorSaveItem_Click Ereignishandler geöffnet.

  2. Ersetzen Sie den Code im Ereignishandler, um die Update Methoden der zugehörigen TableAdapters aufzurufen. Der folgende Code erstellt zunächst drei temporäre Datentabellen, um die aktualisierten Informationen für jedes DataRowState (Deleted, Addedund Modified) zu enthalten. Die Updates werden in der richtigen Reihenfolge ausgeführt. 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();
        }
    }
    

Testen der Anwendung

  1. Drücken Sie F5.

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

  3. Wählen Sie die Schaltfläche Speichern aus.

  4. Überprüfen Sie die Werte in der Datenbank, um zu überprüfen, ob die Änderungen gespeichert wurden.