Freigeben über


Exemplarische Vorgehensweise: Speichern von Daten im Rahmen einer Transaktion

Diese exemplarische Vorgehensweise zeigt, wie man Daten in einer Transaktion mithilfe des System.Transactions Namespace speichert. In diesem Beispiel werden die Tabellen Customers und Orders aus der Beispieldatenbank Northwind verwendet.

Vorbereitungsmaßnahmen

Für diese exemplarische Vorgehensweise wird die Beispieldatenbank Northwind benötigt. 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 ein neues 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 mit .NET Framework.

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

Erstellen einer Datenbank-Datenquelle

Dieser Schritt verwendet den Assistent zum Konfigurieren von Datenquellen auf Grundlage der Tabellen Customers und Orders in der Beispieldatenbank Northwind.

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, starten Sie das Dialogfeld Verbindung hinzufügen/ändern und erstellen Sie eine Verbindung mit der Datenbank Northwind.

  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. NorthwindDataSet, CustomersTableAdapter, BindingSource und BindingNavigator werden auf der Komponentenleiste angezeigt.

  • Ziehen Sie den zugehörigen Knoten Orders (der zugehörige untergeordnete Tabellenknoten unter der Spalte Fax, nicht der Hauptknoten Orders) auf das Formular unter CustomersDataGridView.

    Ein DataGridView wird auf dem Formular angezeigt. OrdersTableAdapter und BindingSource werden auf der Komponentenleiste angezeigt.

Hinzufügen einer Referenz zur Assembly system.transactions

Transaktionen verwenden den Namespace System.Transactions. Eine Projektverweis zur Assembly system.transactions wird standardmäßig nicht hinzugefügt. Sie müssen das also manuell tun.

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

  1. Wählen Sie im Menü Projekt den Punkt Verweis hinzufügen.

  2. Wählen SieSystem.Transactions (auf der Registerkarte .NET) und klicken Sie OK.

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

Den Code in der Schaltfläche BindingNavigator's SaveItem ändern

Standardmäßig wird für die erste auf dem Formular abgelegte Tabelle Code dem click-Ereignis der Schaltfläche "Speichern" auf dem BindingNavigator hinzugefügt. Sie müssen für das Ändern weiterer Tabellen den Code manuell hinzufügen. In dieser exemplarischen Vorgehensweise gestalten wir den vorhandenen Speichern-Code aus dem Click-Ereignishandler der Schaltfläche "Speichern" und erstellen ein paar weitere Methoden, um spezifische Änderungsfunktionalität abhängig davon zur Verfügung zu stellen, ob die Zeile hinzugefügt oder gelöscht werden soll.

So ändern Sie automatisch generierten Speichern-Code

  1. Doppelklicken Sie die Schaltfläche Speichern auf dem CustomersBindingNavigator (die Schaltfläche mit dem 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();
        }
    }
    

Der Befehl für das Abgleichen zugehöriger Daten lautet wie folgt:

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

  • Übergeordnete Datensätze löschen (in diesem Fall: Datensätze aus der Tabelle Customers löschen)

  • Übergeordnete Datensätze einfügen (in diesem Fall: Datensätze in die Tabelle Customers einfügen)

  • Untergeordnete Datensätze einfügen (in diesem Fall: Datensätze in die Tabelle Orders einfügen)

So löschen Sie eine vorhandene Bestellungen

  • Fügen Sie die folgende Methode DeleteOrders zu Form1 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 eine vorhandene Kunden

  • Fügen Sie die folgende Methode DeleteCustomers zu Form1 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");
            }
        }
    }
    

Neue Kunden hinzufügen

  • Fügen Sie die folgende Methode AddNewCustomers zu Form1 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");
            }
        }
    }
    

Neue Bestellungen hinzufügen

  • Fügen Sie die folgende Methode AddNewOrders zu Form1 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

Verteilte Oracle-Transaktionen

Integration von 'System.Transactions' in SQL Server

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

Transaktionen und Parallelität

Herstellen von Datenverbindungen in Visual Studio