Freigeben über


Exemplarische Vorgehensweise: Speichern von Daten im Rahmen einer Transaktion

Diese exemplarische Vorgehensweise erläutert, wie Sie mit dem System.Transactions-Namespace Daten im Rahmen einer Transaktion speichern können.In diesem Beispiel werden die Tabellen Customers und Orders aus der Beispieldatenbank Northwind verwendet.

Vorbereitungsmaßnahmen

Diese exemplarische Vorgehensweise erfordert Zugriff auf die Beispieldatenbank Northwind.Informationen zum Einrichten der Beispieldatenbank Northwind finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.

Erstellen einer Windows-Anwendung

Im ersten Schritt wird eine Windows-Anwendung erstellt.

So erstellen Sie das neue Windows-Projekt

  1. Erstellen Sie in Visual Studio im Menü Datei ein neues Projekt.

  2. Geben Sie dem Projekt den Namen SavingDataInATransactionWalkthrough.

  3. Wählen Sie Windows-Anwendung aus, und klicken Sie auf OK.Weitere Informationen finden Sie unter Entwickeln von Clientanwendungen.

    Das Projekt SavingDataInATransactionWalkthrough wird erstellt und dem Projektmappen-Explorer hinzugefügt.

Erstellen einer Datenquelle, die auf einer Datenbank basiert

In diesem Schritt wird mit dem Assistent zum Konfigurieren von Datenquellen eine Datenquelle erstellt, die auf den Tabellen Customers und Orders aus der Beispieldatenbank Northwind basiert.

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 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, und erstellen Sie eine Verbindung zur Datenbank Northwind.Weitere Informationen finden Sie unter Dialogfeld "Verbindung hinzufügen/ändern" (Allgemein).

  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 Customers und Orders aus, und klicken Sie dann auf Fertig stellen.

    Das NorthwindDataSet wird Ihrem Projekt hinzugefügt, und die Tabellen Customers und Orders werden im Datenquellenfenster angezeigt.

Hinzufügen von Steuerelementen zum Formular

Sie können die datengebundenen Steuerelemente erstellen, indem Sie Elemente aus dem Datenquellenfenster auf das Formular ziehen.

So erstellen Sie datengebundene Steuerelemente auf dem Windows Form

  • Erweitern Sie im Datenquellenfenster den Knoten Customers.

  • Ziehen Sie den Hauptknoten Customers aus dem Datenquellenfenster auf Form1.

    Auf dem Formular wird ein DataGridView-Steuerelement und ein Toolstrip (BindingNavigator) für die Navigation in den Datensätzen angezeigt.Ein NorthwindDataset, ein CustomersTableAdapter, BindingSource und ein BindingNavigator werden auf der Komponentenleiste angezeigt.

  • Ziehen Sie den zugehörigen Knoten Orders (den Knoten, der zur entsprechenden untergeordneten Tabelle gehört und sich unterhalb der Spalte Fax befindet – nicht den Hauptknoten Orders) unterhalb von CustomersDataGridView auf das Formular.

    Im Formular wird ein DataGridView-Steuerelement angezeigt.OrdersTableAdapter und BindingSource werden auf der Komponentenleiste angezeigt.

Hinzufügen eines Verweises auf die System.Transactions-Assembly

Transaktionen verwenden den System.Transactions-Namespace.Ein Projektverweis auf die System.Transactions-Assembly wird nicht standardmäßig hinzugefügt. Daher müssen Sie ihn manuell hinzufügen.

So fügen Sie einen Verweis auf die System.Transactions-DLL-Datei hinzu

  1. Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus.

  2. Wählen Sie auf der Registerkarte .NET die Option System.Transactions aus, und klicken Sie auf OK.

    Dem Projekt wird ein Verweis auf System.Transactions hinzugefügt.

Ändern des Codes in der SaveItem-Schaltfläche von BindingNavigator

Standardmäßig wird dem click Ereignis der Schaltfläche Speichern im BindingNavigator Code für die erste auf dem Formular abgelegte Tabelle hinzugefügt.Den Code für die Aktualisierung weiterer Tabellen müssen Sie manuell hinzufügen.Für diese exemplarische Vorgehensweise nehmen wir eine Umgestaltung des bestehenden Codes zum Speichern aus dem Klickereignishandler der Schaltfläche Speichern vor und erstellen weitere Methoden, die eine speziell auf das Hinzufügen oder Löschen von Zeilen zugeschnittene Aktualisierungsfunktionalität bereitstellen.

So ändern Sie den automatisch generierten Code zum Speichern

  1. Doppelklicken Sie im CustomersBindingNavigator auf die Schaltfläche Speichern (Diskettensymbol).

  2. Ersetzen Sie die CustomersBindingNavigatorSaveItem_Click-Methode durch folgenden Code:

    Private Sub CustomersBindingNavigatorSaveItem_Click() Handles CustomersBindingNavigatorSaveItem.Click
        UpdateData()
    End Sub
    
    Private Sub UpdateData()
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.OrdersBindingSource.EndEdit()
    
        Using updateTransaction As New Transactions.TransactionScope
    
            DeleteOrders()
            DeleteCustomers()
            AddNewCustomers()
            AddNewOrders()
    
            updateTransaction.Complete()
            NorthwindDataSet.AcceptChanges()
        End Using
    End Sub
    
    private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        UpdateData();
    }
    
    private void UpdateData()
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.ordersBindingSource.EndEdit();
    
        using (System.Transactions.TransactionScope updateTransaction = 
            new System.Transactions.TransactionScope())
        {
            DeleteOrders();
            DeleteCustomers();
            AddNewCustomers();
            AddNewOrders();
    
            updateTransaction.Complete();
            northwindDataSet.AcceptChanges();
        }
    }
    

Die Reihenfolge für das Abgleichen von Änderungen an zusammengehörigen Daten ist folgende:

  • Löschen der untergeordneten Datensätze (in diesem Fall: Löschen der Datensätze aus der Tabelle Orders)

  • Löschen der übergeordneten Datensätze (in diesem Fall: Löschen der Datensätze aus der Tabelle Customers)

  • Einfügen der übergeordneten Datensätze (in diesem Fall: Einfügen der Datensätze in die Tabelle Customers)

  • Einfügen der untergeordneten Datensätze (in diesem Fall: Einfügen der Datensätze in die Tabelle Orders)

So löschen Sie Bestellungen aus der Tabelle "Orders"

  • Fügen Sie Form1 die folgende DeleteOrders-Methode hinzu:

    Private Sub DeleteOrders()
    
        Dim deletedOrders As NorthwindDataSet.OrdersDataTable
        deletedOrders = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted),
            NorthwindDataSet.OrdersDataTable)
    
        If Not IsNothing(deletedOrders) Then
            Try
                OrdersTableAdapter.Update(deletedOrders)
    
            Catch ex As Exception
                MessageBox.Show("DeleteOrders Failed")
            End Try
        End If
    End Sub
    
    private void DeleteOrders()
    {
        NorthwindDataSet.OrdersDataTable deletedOrders;
        deletedOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        if (deletedOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(deletedOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteOrders Failed");
            }
        }
    }
    

So löschen Sie Kunden aus der Tabelle "Customers"

  • Fügen Sie Form1 die folgende DeleteCustomers-Methode hinzu:

    Private Sub DeleteCustomers()
    
        Dim deletedCustomers As NorthwindDataSet.CustomersDataTable
        deletedCustomers = CType(NorthwindDataSet.Customers.GetChanges(Data.DataRowState.Deleted),
            NorthwindDataSet.CustomersDataTable)
    
        If Not IsNothing(deletedCustomers) Then
            Try
                CustomersTableAdapter.Update(deletedCustomers)
    
            Catch ex As Exception
                MessageBox.Show("DeleteCustomers Failed" & vbCrLf & ex.Message)
            End Try
        End If
    End Sub
    
    private void DeleteCustomers()
    {
        NorthwindDataSet.CustomersDataTable deletedCustomers;
        deletedCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Deleted);
    
        if (deletedCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(deletedCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteCustomers Failed");
            }
        }
    }
    

So fügen Sie der Tabelle "Customers" neue Kunden hinzu

  • Fügen Sie Form1 die folgende AddNewCustomers-Methode hinzu:

    Private Sub AddNewCustomers()
    
        Dim newCustomers As NorthwindDataSet.CustomersDataTable
        newCustomers = CType(NorthwindDataSet.Customers.GetChanges(Data.DataRowState.Added),
            NorthwindDataSet.CustomersDataTable)
    
        If Not IsNothing(newCustomers) Then
            Try
                CustomersTableAdapter.Update(newCustomers)
    
            Catch ex As Exception
                MessageBox.Show("AddNewCustomers Failed" & vbCrLf & ex.Message)
            End Try
        End If
    End Sub
    
    private void AddNewCustomers()
    {
        NorthwindDataSet.CustomersDataTable newCustomers;
        newCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Added);
    
        if (newCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(newCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewCustomers Failed");
            }
        }
    }
    

So fügen Sie der Tabelle "Orders" neue Bestellungen hinzu

  • Fügen Sie Form1 die folgende AddNewOrders-Methode hinzu:

    Private Sub AddNewOrders()
    
        Dim newOrders As NorthwindDataSet.OrdersDataTable
        newOrders = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added),
            NorthwindDataSet.OrdersDataTable)
    
        If Not IsNothing(newOrders) Then
            Try
                OrdersTableAdapter.Update(newOrders)
    
            Catch ex As Exception
                MessageBox.Show("AddNewOrders Failed" & vbCrLf & ex.Message)
            End Try
        End If
    End Sub
    
    private void AddNewOrders()
    {
        NorthwindDataSet.OrdersDataTable newOrders;
        newOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        if (newOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(newOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewOrders Failed");
            }
        }
    }
    

Ausführen der Anwendung

So führen Sie die Anwendung aus

  • Drücken Sie F5, um die Anwendung auszuführen.

Siehe auch

Aufgaben

Gewusst wie: Speichern von Daten mithilfe von Transaktionen

Konzepte

Enlisting in Distributed Transactions

Leveraging System.Transactions

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

Weitere Ressourcen

Performing Transactions

Herstellen von Datenverbindungen in Visual Studio