Exemplarische Vorgehensweise: Speichern von Daten im Rahmen einer Transaktion

 

Veröffentlicht: Juli 2016

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

    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 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();
                }
            }
    
        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
    

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 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");
                    }
                }
            }
    
        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
    

So löschen Sie eine vorhandene Kunden

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

            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");
                    }
                }
            }
    
        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
    

Neue Kunden hinzufügen

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

            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");
                    }
                }
            }
    
        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
    

Neue Bestellungen hinzufügen

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

            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");
                    }
                }
            }
    
        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
    

Ausführen der Anwendung

So führen Sie die Anwendung aus

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

Siehe auch

Transaktionen und Parallelität
Verteilte Oracle-Transaktionen
Gewusst wie: Speichern von Daten mithilfe von Transaktionen
System.Transactions-Integration in SQL Server
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