Partager via


Procédure pas à pas : enregistrement de données dans une transaction

 

Date de publication : mars 2016

Cette procédure pas à pas décrit comment enregistrer les 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 un accès à l'exemple de base de données Northwind. Pour plus d'informations sur la configuration 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 un projet Windows

  1. Dans Visual Studio, dans le menu Fichier, créez un Projet.

  2. Attribuez le nom SavingDataInATransactionWalkthrough au projet.

  3. Sélectionnez Application Windows et cliquez sur OK. Pour plus d'informations, consultez Applications clientes.

    Le projet SavingDataInATransactionWalkthrough est créé et ajouté à l'Explorateur de solutions.

Création d'une source de base de données

Cette étape utilise l'Configuration de source de données (Assistant) pour créer une source de données basée sur les tables Customers et Orders de l'exemple de base de données Northwind.

Pour créer la source de données

  1. Dans le menu Données, cliquez sur Afficher les sources de données.

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

  3. Sélectionnez Base de données dans la page Choisir un type de source de données, puis cliquez sur Suivant.

  4. 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éez une connexion à la base de données Northwind.

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

  6. Cliquez sur Suivant dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application.

  7. Développez le nœud Tables dans la page Choisir vos objets de base de données.

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

Pour créer des contrôles liés aux données, vous pouvez faire 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 dans le formulaire Windows

  • Développez le nœud Customers dans la fenêtre Sources de données.

  • Faites glisser le nœud Customers principal depuis la fenêtre Sources de données vers Form1.

    Un contrôle DataGridView et une barre d'outils (BindingNavigator) pour parcourir les enregistrements apparaissent dans le formulaire. NorthwindDataSet, CustomersTableAdapter, BindingSource et BindingNavigator s'affichent dans la barre d'état des composants.

  • Faites glisser le nœud Orders associé (le nœud de la table enfant associée figurant sous la colonne Fax, et non le nœud Orders principal) vers le formulaire sous le CustomersDataGridView.

    Un DataGridView s'affiche 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 project vers l'assembly system.transactions n'est pas ajoutée par défaut, vous devez donc l'ajouter manuellement.

Pour ajouter une référence au fichier DLL System.Transactions

  1. Dans le menu Projet, choisissez Ajouter une référence.

  2. 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 du bouton SaveItem de BindingNavigator

Par défaut, pour la première table déplacée dans votre formulaire, du code est ajouté à l'événement click du bouton d'enregistrement sur le BindingNavigator. Vous devez manuellement ajouter du code pour mettre à jour toutes les tables supplémentaires. Pour cette procédure pas à pas, nous refactorisons le code d'enregistrement existant en dehors du gestionnaire d'événements Click du bouton d'enregistrement et créons quelques méthodes supplémentaires pour fournir une fonctionnalité de mise à jour spécifique selon que la ligne nécessite d'être ajoutée ou supprimée.

Pour modifier le code d'enregistrement généré automatiquement

  1. Double-cliquez sur le bouton Enregistrement du CustomersBindingNavigator (le bouton avec une icône en forme de disquette).

  2. Remplacez la méthode CustomersBindingNavigatorSaveItem_Click par le code suivant :

            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
    

L'ordre de rapprochement des modifications des données associées est comme suit :

  • Supprimer des enregistrements enfants (dans ce cas, supprimer des enregistrements de la table Orders)

  • Supprimer des enregistrements parents (dans ce cas, supprimer des enregistrements de la table Customers)

  • Insérer des enregistrements parents (dans ce cas, insérer des enregistrements dans la table Customers)

  • Insérer des enregistrements enfants (dans ce cas, insérer des enregistrements dans la table Orders)

Pour supprimer des commandes existantes

  • Ajoutez la méthode DeleteOrders suivante à Form1 :

            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
    

Pour supprimer des clients existants

  • Ajoutez la méthode DeleteCustomers suivante à Form1 :

            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
    

Pour ajouter de nouveaux clients

  • Ajoutez la méthode AddNewCustomers suivante à Form1 :

            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
    

Pour ajouter de nouvelles commandes

  • Ajoutez la méthode AddNewOrders suivante à Form1 :

            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
    

Exécution de l'application

Pour exécuter l'application

  • Appuyez sur F5 pour exécuter l'application.

Voir aussi

Transactions et concurrence
Transactions distribuées Oracle
Comment : enregistrer des données à l'aide d'une transaction
Intégration de System.Transactions à SQL Server
Connexion aux données dans Visual Studio
Préparation de votre application pour recevoir des données
Extraction de données dans votre application
Liaison de contrôles à des données dans Visual Studio
Modification des données dans votre application
Validation des données
Enregistrement des données