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
Erstellen Sie in Visual Studio im Menü Datei ein neues Projekt.
Geben Sie dem Projekt den Namen SavingDataInATransactionWalkthrough.
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
Klicken Sie im Menü Daten auf Datenquellen anzeigen.
Wählen Sie im Datenquellenfenster die Option Neue Datenquelle hinzufügen aus, um den Assistenten zum Konfigurieren von Datenquellen zu starten.
Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und klicken Sie auf Weiter.
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.
Falls die Datenbank ein Kennwort erfordern sollte, aktivieren Sie die Option für die Einbeziehung vertraulicher Daten, und klicken Sie dann auf Weiter.
Klicken Sie auf der Seite Verbindungszeichenfolge in der Programmkonfigurationsdatei speichern auf Weiter.
Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen.
Wählen Sie die Tabellen
Customers
undOrders
aus, und klicken Sie dann auf Fertig stellen.Das NorthwindDataSet wird Ihrem Projekt hinzugefügt, und die Tabellen
Customers
undOrders
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
Wählen Sie im Menü Projekt den Punkt Verweis hinzufügen.
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
Doppelklicken Sie die Schaltfläche Speichern auf dem CustomersBindingNavigator (die Schaltfläche mit dem Diskettensymbol).
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