Exemplarische Vorgehensweise: Speichern von Daten im Rahmen einer Transaktion
Aktualisiert: November 2007
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 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 Erstellen von Windows-basierten Anwendungen.
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
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.
Gehen Sie auf der Seite Wählen Sie Ihre Datenverbindung aus auf eine der folgenden Arten vor:
Wenn in der Dropdownliste eine Datenverbindung zur Beispieldatenbank Northwind verfügbar ist, wählen Sie diese 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).
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 Anwendungskonfigurationsdatei speichern auf Weiter.
Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen.
Wählen Sie die Tabellen Customers und Orders aus, und klicken Sie dann auf Fertig stellen.
NorthwindDataSet wird Ihrem Projekt hinzugefügt. 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 im Komponentenfach 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 im Komponentenfach 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
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus.
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
Doppelklicken Sie im CustomersBindingNavigator auf die Schaltfläche Speichern (Diskettensymbol).
Ersetzen Sie die CustomersBindingNavigatorSaveItem_Click-Methode durch folgenden Code:
Private Sub CustomersBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 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
- Drucken 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 (ADO.NET)
Weitere Ressourcen
Transaktionen und Parallelität (ADO.NET)
Herstellen von Datenverbindungen in Visual Studio
Vorbereiten der Anwendung auf den Empfang von Daten
Abrufen von Daten für die Anwendung
Anzeigen von Daten in Formularen in Windows-Anwendungen