Procédure pas à pas : enregistrement de données dans une transaction
Cette procédure pas à pas montre comment enregistrer des données dans une transaction à l'aide de l'espace de noms System.Transactions. Cet exemple utilise les tables Customers et Orders de l'exemple de base de données Northwind.
Composants requis
Cette procédure pas à pas requiert l'accès à l'exemple de base de données Northwind. Pour plus d'informations sur l'installation de l'exemple de base de données Northwind, consultez Comment : installer des exemples de bases de données.
Création d'une application Windows
La première étape consiste à créer une Application Windows.
Pour créer le nouveau projet Windows
Dans le menu Fichier de Visual Studio, créez un nouveau Projet.
Nommez le projet ProcédureEnregistrementDonnéesDansTransaction.
Sélectionnez Application Windows, puis cliquez sur OK. Pour plus d'informations, consultez Création d'applications Windows.
Le projet ProcédureEnregistrementDonnéesDansTransaction est créé et ajouté à l'Explorateur de solutions.
Création d'une source de données de base de données
Cette étape utilise le Configuration de source de données (Assistant) pour créer une source de données selon les tables Customers et Orders dans l'exemple de base de données Les Comptoirs.
Pour créer la source de données
Dans le menu Données, cliquez sur Afficher les sources de données.
Dans la fenêtre Sources de données, sélectionnez Ajouter une nouvelle source de données pour démarrer l'Assistant Configuration de source de données.
Sélectionnez Base de données dans la page Choisir un type de source de données, puis cliquez sur Suivant.
Dans la page Choisir votre connexion de données, effectuez l'une des opérations suivantes :
Si une connexion de données à l'exemple de base de données Northwind est disponible dans la liste déroulante, sélectionnez-la.
ou
Sélectionnez Nouvelle connexion pour lancer la boîte de dialogue Ajouter/Modifier une connexion et créer une connexion à la base de données Northwind. Pour plus d'informations, consultez Ajouter/Modifier une connexion, boîte de dialogue (Général).
Si votre base de données requiert un mot de passe, sélectionnez l'option pour inclure les données sensibles, puis cliquez sur Suivant.
Cliquez sur Suivant dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application.
Développez le nœud Tables dans la page Choisir vos objets de base de données.
Sélectionnez les tables Customers et Orders, puis cliquez sur Terminer.
NorthwindDataSet est ajouté à votre projet et les tables Customers et Orders apparaissent dans la fenêtre Sources de données.
Ajout de contrôles au formulaire
Vous pouvez créer les contrôles liés aux données en faisant glisser des éléments depuis la fenêtre Sources de données vers votre formulaire.
Pour créer des contrôles liés aux données sur le Windows Form
Développez le nœud Customers dans la fenêtre Sources de données.
Faites glisser le nœud Customers depuis la fenêtre Sources de données vers Form1.
Un contrôle DataGridView et une barre d'outils (BindingNavigator) de navigation au sein des enregistrements apparaissent sur le formulaire. Un NorthwindDataSet, un CustomersTableAdapter, un BindingSource et un BindingNavigator apparaissent dans la barre d'état des composants.
Faites glisser le nœud Orders connexe (le nœud de table enfant associé sous la colonne Fax, pas le nœud Orders principal) vers le formulaire sous CustomersDataGridView.
Un contrôle DataGridView apparaît dans le formulaire. Un OrdersTableAdapter et un BindingSource apparaissent dans la barre d'état des composants.
Ajout d'une référence à l'assembly System.Transactions.
Les transactions utilisent l'espace de noms System.Transactions. Une référence de projet à l'assembly system.transactions n'étant pas ajoutée par défaut, vous devez l'ajouter manuellement.
Pour ajouter une référence au fichier de DLL System.Transactions
Dans le menu Projet, sélectionnez Ajouter une référence.
Sélectionnez System.Transactions (sous l'onglet .NET) et cliquez sur OK.
Une référence à System.Transactions est ajoutée au projet.
Modification du code dans le bouton SaveItem du BindingNavigator
Par défaut, le code est ajouté à l'événement click du bouton d'enregistrement sur le BindingNavigator de la première table déplacée sur votre formulaire. Vous devez ajouter manuellement le code pour mettre à jour les tables supplémentaires. Pour cette procédure pas à pas, nous refactorisons le code d'enregistrement existant à partir du gestionnaire d'événement Click du bouton d'enregistrement, puis nous créons quelques méthodes supplémentaires pour fournir des fonctionnalités de mise à jour spécifiques selon si la ligne doit être ajoutée ou supprimée.
Pour modifier le code d'enregistrement généré automatiquement
Double-cliquez sur le bouton Save du CustomersBindingNavigator (le bouton portant une icône représentant une disquette).
Remplacez la méthode CustomersBindingNavigatorSaveItem_Click par le code suivant :
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(); } }
L'ordre de rapprochement des modifications apportées aux données relationnelles est le suivant :
Suppression des enregistrements enfants (dans ce cas, les enregistrements de la table Orders)
Suppression des enregistrements parents (dans ce cas, les enregistrements de la table Customers)
Insertion des enregistrements parents (dans ce cas, les enregistrements de la table Customers)
Insertion des enregistrements enfants (dans ce cas, les enregistrements de la table Orders)
Pour supprimer des commandes existantes
Ajoutez la méthode DeleteOrders suivante à Form1 :
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"); } } }
Pour supprimer des clients existants
Ajoutez la méthode DeleteCustomers suivante à Form1 :
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"); } } }
Pour ajouter de nouveaux clients
Ajoutez la méthode AddNewCustomers suivante à Form1 :
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"); } } }
Pour ajouter de nouvelles commandes
Ajoutez la méthode AddNewOrders suivante à Form1 :
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"); } } }
Exécution de l'application
Pour exécuter l'application
- Appuyez sur F5 pour exécuter l'application.
Voir aussi
Tâches
Comment : enregistrer des données à l'aide d'une transaction
Concepts
Transactions distribuées Oracle
Intégration de System.Transactions à SQL Server (ADO.NET)
Liaison de contrôles à des données dans Visual Studio
Autres ressources
Transactions et concurrence (ADO.NET)
Connexion aux données dans Visual Studio
Préparation de votre application pour recevoir des données
Extraction de données dans votre application