Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Die DataSet Klassen und verwandten Klassen sind ältere .NET Framework-Technologien aus den frühen 2000er Jahren, mit denen Anwendungen mit Daten im Arbeitsspeicher arbeiten können, während die Apps von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Apps, mit denen Benutzer Daten ändern und die Änderungen wieder in der Datenbank speichern können. Obwohl Datasets eine bewährte erfolgreiche Technologie sind, ist der empfohlene Ansatz für neue .NET-Anwendungen die Verwendung von Entity Framework Core. Entity Framework bietet eine natürlichere Möglichkeit zum Arbeiten mit tabellarischen Daten als Objektmodelle und verfügt über eine einfachere Programmierschnittstelle.
In dieser exemplarischen Vorgehensweise wird das Speichern von Daten in einer Transaktion mithilfe des System.Transactions Namespaces veranschaulicht. In dieser exemplarischen Vorgehensweise erstellen Sie eine Windows Forms-Anwendung. Sie verwenden den Datenquellenkonfigurations-Assistenten, um ein Dataset für zwei Tabellen in der Northwind-Beispieldatenbank zu erstellen. Sie fügen datengebundene Steuerelemente zu einem Windows-Formular hinzu, und Sie ändern den Code für die Schaltfläche zum Speichern von BindingNavigator, um die Datenbank in einem TransactionScope zu aktualisieren.
Voraussetzungen
Um dieses Lernprogramm abzuschließen, benötigen Sie die in Visual Studio installierten Workloads für .NET-Desktopentwicklung und Datenspeicherung und -verarbeitung. Um sie zu installieren, öffnen Sie Visual Studio Installer, und wählen Sie Ändern (oder Mehr>Ändern) neben der Version von Visual Studio aus, die Sie ändern möchten. Weitere Informationen finden Sie im Artikel Ändern von Visual Studio durch Hinzufügen oder Entfernen von Arbeitsauslastungen und Komponenten.
In dieser exemplarischen Vorgehensweise wird SQL Server Express LocalDB und die Northwind-Beispieldatenbank verwendet.
Wenn Sie nicht über SQL Server Express LocalDB verfügen, installieren Sie sie entweder über die SQL Server Express-Downloadseite oder über das Visual Studio-Installationsprogramm. Im Visual Studio-Installer kann SQL Server Express LocalDB als Teil der .NET-Desktopentwicklungsworkload oder als einzelne Komponente installiert werden.
Installieren Sie die Northwind-Beispieldatenbank, indem Sie die folgenden Schritte ausführen:
Öffnen Sie in Visual Studio das fenster SQL Server-Objekt-Explorer. (SQL Server-Objekt-Explorer wird als Teil der Datenspeicherungs- und Verarbeitungsauslastung im Visual Studio Installer installiert.) Erweitern Sie den SQL Server-Knoten . Klicken Sie mit der rechten Maustaste auf Ihre LocalDB-Instanz, und wählen Sie neue Abfrageaus.
Ein Abfrage-Editor-Fenster wird geöffnet.
Kopieren Sie das Northwind-Transact-SQL Skript in die Zwischenablage. Dieses T-SQL-Skript erstellt die Northwind-Datenbank von Grund auf neu und füllt sie mit Daten auf.
Fügen Sie das T-SQL-Skript in den Abfrage-Editor ein, und wählen Sie dann die Schaltfläche Ausführen aus.
Nach kurzer Zeit wird die Ausführung der Abfrage abgeschlossen, und die Northwind-Datenbank wird erstellt.
Erstellen einer Windows Forms-Anwendung
Der erste Schritt besteht darin, eine Windows Forms-App (.NET Framework) zu erstellen.
Wählen Sie in Visual Studio im Menü "Datei" die Option "Neues Projekt"> aus.
Erweitern Sie entweder Visual C# oder Visual Basic im linken Bereich, und wählen Sie dann Windows Desktop aus.
Wählen Sie im mittleren Bereich den Projekttyp "Windows Forms-App " aus.
Benennen Sie das Projekt SavingDataInATransactionWalkthrough, und wählen Sie dann "OK" aus.
Das Projekt SavingDataInATransactionWalkthrough wird erstellt und zum Projektmappen-Explorer hinzugefügt.
Erstellen einer Datenbankdatenquelle
In diesem Schritt wird der Datenquellenkonfigurations-Assistent verwendet, um eine Datenquelle basierend auf den Customers Und Orders Tabellen in der Northwind-Beispieldatenbank zu erstellen.
Um das Fenster "Datenquellen " zu öffnen, wählen Sie im Menü " Daten " die Option "Datenquellen anzeigen" aus.
Wählen Sie im Fenster "Datenquellen " die Option "Neue Datenquelle hinzufügen " aus, um den Assistenten für die Datenquellenkonfiguration zu starten.
Wählen Sie auf dem Bildschirm " Datenquellentyp auswählen " die Option "Datenbank" und dann "Weiter" aus.
Führen Sie auf dem Bildschirm " Datenverbindung auswählen " eine der folgenden Aktionen aus:
Wenn eine Datenverbindung mit der Northwind-Beispieldatenbank 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 starten und eine Verbindung mit der Northwind-Datenbank zu erstellen.
Wenn Ihre Datenbank ein Kennwort erfordert, wählen Sie die Option aus, vertrauliche Daten einzuschließen, und wählen Sie dann "Weiter" aus.
Wählen Sie auf dem Bildschirm 'Verbindungszeichenfolge in der Anwendungskonfigurationsdatei speichern' die Option 'Weiter' aus.
Erweitern Sie auf dem Bildschirm "Datenbankobjekte auswählen " den Knoten "Tabellen ".
Wählen Sie die
CustomersundOrdersTabellen aus und klicken Sie auf Abschließen.Das NorthwindDataSet wird Ihrem Projekt hinzugefügt, und die
CustomersTabellen werdenOrdersim Fenster "Datenquellen " angezeigt.
Hinzufügen von Steuerelementen zu dem Formular
Sie können die datengebundenen Steuerelemente erstellen, indem Sie Elemente aus dem Datenquellenfenster auf Ihr Formular ziehen.
Erweitern Sie im Fenster "Datenquellen " den Knoten " Kunden ".
Ziehen Sie den Hauptknoten "Kunden " aus dem Fenster "Datenquellen " auf "Form1".
Ein DataGridView Steuerelement und eine Toolleiste (BindingNavigator) für die Navigation in Datensätzen werden im Formular angezeigt. Ein NorthwindDataSet,
CustomersTableAdapter, BindingSource und BindingNavigator werden im Komponentenbereich 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.
Im Formular erscheint ein DataGridView. Ein
OrdersTableAdapterund BindingSource werden in der Komponentenleiste angezeigt.
Fügen Sie einen Verweis auf die System.Transactions-Assembly hinzu
Transaktionen verwenden den System.Transactions Namespace. Ein Projektverweis auf die Assembly "system.transactions" wird standardmäßig nicht hinzugefügt, daher müssen Sie ihn manuell hinzufügen.
So fügen Sie einen Verweis zur DLL-Datei System.Transactions hinzu
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus.
Wählen Sie "System.Transactions" (auf der
.NETRegisterkarte) und dann "OK" aus.Dem Projekt wird ein Verweis auf System.Transactions hinzugefügt.
Ändern Sie den Code im SaveItem-Button des BindingNavigators
Für die erste Tabelle, die auf dem Formular abgelegt wurde, wird der Code standardmäßig zum click Ereignis der Schaltfläche "Speichern" auf dem BindingNavigator hinzugefügt. Sie müssen Code manuell hinzufügen, um alle zusätzlichen Tabellen zu aktualisieren. Bei dieser exemplarischen Vorgehensweise wird der vorhandene Speichercode aus dem Klickereignishandler der Schaltfläche „Speichern“ umgestaltet. Außerdem erstellen wir einige weitere Methoden, um bestimmte Updatefunktionen bereitzustellen, je nachdem, ob die Zeile hinzugefügt oder gelöscht werden muss.
So ändern Sie den automatisch generierten Speichercode
Wählen Sie die Schaltfläche " Speichern " auf dem CustomersBindingNavigator (die Schaltfläche mit dem Diskettensymbol) aus.
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(); } }
Die Reihenfolge für die Abstimmung von Änderungen an verwandten Daten lautet wie folgt:
Löschen Sie untergeordnete Datensätze. (In diesem Fall löschen Sie Datensätze aus der
OrdersTabelle.)Löschen Sie übergeordnete Datensätze. (In diesem Fall löschen Sie Datensätze aus der
CustomersTabelle.)Fügen Sie übergeordnete Datensätze ein. (In diesem Fall fügen Sie Datensätze in die
CustomersTabelle ein.)Fügen Sie untergeordnete Datensätze ein. (In diesem Fall fügen Sie Datensätze in die
OrdersTabelle ein.)
So löschen Sie vorhandene Bestellungen
Fügen Sie die folgende
DeleteOrdersMethode 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"); } } }
So löschen Sie vorhandene Kunden
Fügen Sie die folgende
DeleteCustomersMethode 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"); } } }
So fügen Sie neue Kunden hinzu
Fügen Sie die folgende
AddNewCustomersMethode 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"); } } }
So fügen Sie neue Bestellungen hinzu
Fügen Sie die folgende
AddNewOrdersMethode 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"); } } }
Ausführen der Anwendung
Drücken Sie F5 , um die Anwendung auszuführen.