Procédure : Enregistrer des données dans une transactionWalkthrough: Save data in a transaction

Cette procédure pas à pas montre comment enregistrer les données dans une transaction à l’aide de la System.Transactions espace de noms.This walkthrough demonstrates how to save data in a transaction by using the System.Transactions namespace. Dans cette procédure pas à pas, vous allez créer une application Windows Forms.In this walkthrough you'll create a Windows Forms application. L’Assistant Configuration de Source de données vous permet de créer un jeu de données pour les deux tables dans la base de données Northwind.You'll use the Data Source Configuration Wizard to create a dataset for two tables in the Northwind sample database. Vous allez ajouter des contrôles liés aux données à un Windows form, et vous allez modifier le code de BindingNavigator bouton Enregistrer Mettre à jour la base de données à l’intérieur de TransactionScope.You'll add data bound controls to a Windows form, and you'll modify the code for the BindingNavigator's save button to update the database inside a TransactionScope.

PrérequisPrerequisites

Cette procédure pas à pas utilise SQL Server Express LocalDB et la base de données Northwind.This walkthrough uses SQL Server Express LocalDB and the Northwind sample database.

  1. Si vous n’avez pas SQL Server Express LocalDB, installez-le à partir de la page de téléchargement de SQL Server Express, ou via le le programme d’installation de Visual Studio.If you don't have SQL Server Express LocalDB, install it either from the SQL Server Express download page, or through the Visual Studio Installer. Dans le programme d’installation Visual Studio, SQL Server Express LocalDB peut être installé dans le cadre de la développement de bureau .NET charge de travail, ou sous la forme d’un composant individuel.In the Visual Studio Installer, SQL Server Express LocalDB can be installed as part of the .NET desktop development workload, or as an individual component.

  2. Installer la base de données Northwind en procédant comme suit :Install the Northwind sample database by following these steps:

    1. Dans Visual Studio, ouvrez le l’Explorateur d’objets SQL Server fenêtre.In Visual Studio, open the SQL Server Object Explorer window. (Explorateur d’objets SQL Server est installé dans le cadre de la stockage de données et de traitement charge de travail dans le programme d’installation Visual Studio.) Développez le SQL Server nœud.(SQL Server Object Explorer is installed as part of the Data storage and processing workload in the Visual Studio Installer.) Expand the SQL Server node. Avec le bouton droit sur votre instance de base de données locale et sélectionnez nouvelle requête... .Right-click on your LocalDB instance and select New Query....

      Une fenêtre d’éditeur de requête s’ouvre.A query editor window opens.

    2. Copie le script Transact-SQL de Northwind dans le Presse-papiers.Copy the Northwind Transact-SQL script to your clipboard. Ce script T-SQL crée la base de données Northwind à partir de zéro et la remplit avec des données.This T-SQL script creates the Northwind database from scratch and populates it with data.

    3. Collez le script T-SQL dans l’éditeur de requête, puis choisissez le Execute bouton.Paste the T-SQL script into the query editor, and then choose the Execute button.

      Après une courte période, la requête est terminée et la base de données Northwind est créé.After a short time, the query finishes executing and the Northwind database is created.

Créer une application Windows FormsCreate a Windows Forms application

La première étape consiste à créer un Application Windows Forms.The first step is to create a Windows Forms Application.

Pour créer un projet WindowsTo create the new Windows project

  1. Dans Visual Studio, sur le fichier menu, sélectionnez nouveau, projet... .In Visual Studio, on the File menu, select New, Project....

  2. Développez le Visual C# ou Visual Basic dans le volet gauche, puis sélectionnez de bureau Windows classique.Expand either Visual C# or Visual Basic in the left-hand pane, then select Windows Classic Desktop.

  3. Dans le volet central, sélectionnez le l’application Windows Forms type de projet.In the middle pane, select the Windows Forms App project type.

  4. Nommez le projet SavingDataInATransactionWalkthrough, puis choisissez OK.Name the project SavingDataInATransactionWalkthrough, and then choose OK.

    Le SavingDataInATransactionWalkthrough projet est créé et ajouté à l’Explorateur de solutions.The SavingDataInATransactionWalkthrough project is created and added to Solution Explorer.

Créer une source de données de base de donnéesCreate a database data source

Cette étape utilise la Assistant de Configuration de Source de données pour créer une source de données basée sur la Customers et Orders les tables dans la base de données Northwind.This step uses the Data Source Configuration Wizard to create a data source based on the Customers and Orders tables in the Northwind sample database.

Pour créer la source de donnéesTo create the data source

  1. Sur le données menu, sélectionnez afficher les Sources de données.On the Data menu, select Show Data Sources.

  2. Dans le des Sources de données fenêtre, sélectionnez ajouter une nouvelle Source de données pour démarrer le Assistant de Configuration de Source de données.In the Data Sources window, select Add New Data Source to start the Data Source Configuration Wizard.

  3. Sur le choisir un Type de Source de données écran, sélectionnez base de données, puis sélectionnez suivant.On the Choose a Data Source Type screen, select Database, and then select Next.

  4. Sur le choisir votre connexion de données écran, procédez comme suit :On the Choose your Data Connection screen do one of the following:

    • Si une connexion de données à l’exemple de base de données Northwind est disponible dans la liste déroulante, sélectionnez-la.If a data connection to the Northwind sample database is available in the drop-down list, select it.

      - ou --or-

    • Sélectionnez nouvelle connexion pour lancer le Ajouter/modifier la connexion boîte de dialogue zone et créer une connexion à la base de données Northwind.Select New Connection to launch the Add/Modify Connection dialog box and create a connection to the Northwind database.

  5. Si votre base de données requiert un mot de passe, sélectionnez l’option pour inclure les données sensibles, puis sélectionnez suivant.If your database requires a password, select the option to include sensitive data, and then select Next.

  6. Sur le enregistrer la chaîne de connexion dans le fichier de Configuration de l’Application écran, sélectionnez suivant.On the Save connection string to the Application Configuration file screen, select Next.

  7. Sur le choisir vos objets de base de données écran, développez le Tables nœud.On the Choose your Database Objects screen, expand the Tables node.

  8. Sélectionnez le Customers et Orders tables, puis sélectionnez Terminer.Select the Customers and Orders tables, and then select Finish.

    Le NorthwindDataSet est ajouté à votre projet et le Customers et Orders tables apparaissent dans le des Sources de données fenêtre.The NorthwindDataSet is added to your project and the Customers and Orders tables appear in the Data Sources window.

Ajouter des contrôles au formulaireAdd controls to the form

Vous pouvez créer les contrôles liés aux données en faisant glisser des éléments depuis la des Sources de données fenêtre vers votre formulaire.You can create the data-bound controls by dragging items from the Data Sources window onto your form.

Pour créer des données liées à des contrôles sur le formulaire WindowsTo create data bound controls on the Windows form

  • Dans le des Sources de données fenêtre, développez le clients nœud.In the Data Sources window, expand the Customers node.

  • Faites glisser le clients nœud à partir de la des Sources de données fenêtre sur Form1.Drag the main Customers node from the Data Sources window onto Form1.

    Un contrôle DataGridView et une barre d'outils (BindingNavigator) pour parcourir les enregistrements apparaissent dans le formulaire.A DataGridView control and a tool strip (BindingNavigator) for navigating records appear on the form. A NorthwindDataSet, CustomersTableAdapter, BindingSource, et BindingNavigator s’affichent dans la barre d’état du composant.A NorthwindDataSet, CustomersTableAdapter, BindingSource, and BindingNavigator appear in the component tray.

  • Faites glisser le commandes nœud (pas le principal commandes nœud, mais le nœud de la table enfant connexe ci-dessous le télécopie colonne) vers le formulaire sous la CustomersDataGridView.Drag the related Orders node (not the main Orders node, but the related child-table node below the Fax column) onto the form below the CustomersDataGridView.

    Un DataGridView s'affiche dans le formulaire.A DataGridView appears on the form. Un OrdersTableAdapter et BindingSource s’affichent dans la barre d’état du composant.An OrdersTableAdapter and BindingSource appear in the component tray.

Ajoutez une référence à l’assembly System.TransactionsAdd a reference to the System.Transactions assembly

Les transactions utilisent l'espace de noms System.Transactions.Transactions use the System.Transactions namespace. 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.A project reference to the system.transactions assembly is not added by default, so you need to manually add it.

Pour ajouter une référence au fichier DLL System.TransactionsTo add a reference to the System.Transactions DLL file

  1. Sur le projet menu, sélectionnez ajouter une référence.On the Project menu, select Add Reference.

  2. Sélectionnez System.Transactions (sur le .NET onglet), puis sélectionnez OK.Select System.Transactions (on the .NET tab), and then select OK.

    Une référence à System.Transactions est ajouté au projet.A reference to System.Transactions is added to the project.

Modifier le code du bouton SaveItem de BindingNavigatorModify the code in the BindingNavigator's SaveItem button

Pour la première table déposée dans votre formulaire, le code est ajouté par défaut pour le click bouton d’événement de l’enregistrement sur le BindingNavigator.For the first table dropped onto your form, code is added by default to the click event of the save button on the BindingNavigator. Vous devez manuellement ajouter du code pour mettre à jour toutes les tables supplémentaires.You need to manually add code to update any additional tables. Pour cette procédure pas à pas, nous refactoriser le code en dehors de l’enregistrement d’enregistrement existant Gestionnaire d’événements de clic du bouton.For this walkthrough, we refactor the existing save code out of the save button's click event handler. Nous avons également créer quelques méthodes supplémentaires pour fournir la fonctionnalité de mise à jour spécifique selon si la ligne doit être ajouté ou supprimé.We also create a few more methods to provide specific update functionality based on whether the row needs to be added or deleted.

Pour modifier le code d'enregistrement généré automatiquementTo modify the auto-generated save code

  1. Sélectionnez le enregistrer bouton sur le CustomersBindingNavigator (le bouton avec l’icône de disquette).Select the Save button on the CustomersBindingNavigator (the button with the floppy disk icon).

  2. Remplacez la méthode CustomersBindingNavigatorSaveItem_Click par le code suivant :Replace the CustomersBindingNavigatorSaveItem_Click method with the following code:

    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 des données associées est comme suit :The order for reconciling changes to related data is as follows:

  • Suppression des enregistrements enfants.Delete child records. (Dans ce cas, supprimer des enregistrements de la Orders table.)(In this case, delete records from the Orders table.)

  • Suppression des enregistrements parents.Delete parent records. (Dans ce cas, supprimer des enregistrements de la Customers table.)(In this case, delete records from the Customers table.)

  • Insertion des enregistrements parents.Insert parent records. (Dans ce cas, insérer des enregistrements dans la Customers table.)(In this case, insert records in the Customers table.)

  • Insertion des enregistrements enfants.Insert child records. (Dans ce cas, insérer des enregistrements dans la Orders table.)(In this case, insert records in the Orders table.)

Pour supprimer des commandes existantesTo delete existing orders

  • Ajoutez le code suivant DeleteOrders méthode Form1:Add the following DeleteOrders method to 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 existantsTo delete existing customers

  • Ajoutez le code suivant DeleteCustomers méthode Form1:Add the following DeleteCustomers method to 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 clientsTo add new customers

  • Ajoutez le code suivant AddNewCustomers méthode Form1:Add the following AddNewCustomers method to 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 commandesTo add new orders

  • Ajoutez le code suivant AddNewOrders méthode Form1:Add the following AddNewOrders method to 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écuter l'applicationRun the application

Pour exécuter l’applicationTo run the application

  • Sélectionnez F5 pour exécuter l’application.Select F5 to run the application.

Voir aussiSee also

Comment : enregistrer des données à l’aide d’une transactionHow to: save data by using a transaction
Enregistrer les données dans la base de donnéesSave data back to the database