Partager via


Procédure pas à pas : enregistrer des données dans une transaction dans des applications .NET Framework

Remarque

La DataSet classe et les classes associées sont des technologies .NET Framework héritées du début des années 2000 qui permettent aux applications d’utiliser des données en mémoire pendant que les applications sont déconnectées de la base de données. Les technologies sont particulièrement utiles pour les applications qui permettent aux utilisateurs de modifier les données et de conserver les modifications apportées à la base de données. Bien que les jeux de données soient une technologie éprouvée, l’approche recommandée pour les nouvelles applications .NET consiste à utiliser Entity Framework Core. Entity Framework offre un moyen plus naturel d’utiliser des données tabulaires en tant que modèles objet et dispose d’une interface de programmation plus simple.

Ce guide démontre comment sauvegarder des données dans une transaction à l’aide de l’espace de noms System.Transactions. Dans cette procédure pas à pas, vous allez créer une application Windows Forms. Vous allez utiliser l’Assistant Configuration de source de données pour créer un jeu de données pour deux tables dans l’exemple de base de données Northwind. Vous allez ajouter des contrôles liés aux données à un formulaire Windows et modifier le code du bouton Enregistrer de BindingNavigator pour mettre à jour la base de données à l’intérieur d’un TransactionScope.

Conditions préalables

Pour suivre ce tutoriel, vous avez besoin des charges de travail de développement et de traitement de données.NET desktop installées dans Visual Studio. Pour les installer, ouvrez visual Studio Installer et choisissez Modifier (ou Plus>Modifier) en regard de la version de Visual Studio que vous souhaitez modifier. Consultez Modifier Visual Studio.

Cette procédure pas à pas utilise SQL Server Express LocalDB et l’exemple de base de données Northwind.

  1. Si sql Server Express LocalDB n’est pas installé, installez-le à partir de la page de téléchargement SQL Server Express ou via Visual Studio Installer. Dans Visual Studio Installer, SQL Server Express LocalDB peut être installé dans le cadre de la charge de travail de développement de bureau .NET ou en tant que composant individuel.

  2. Installez l’exemple de base de données Northwind en procédant comme suit :

    1. Dans Visual Studio, ouvrez la fenêtre de l’Explorateur d’objets SQL Server. (L’Explorateur d’objets SQL Server est installé dans le cadre de la charge de travail de stockage et de traitement des données dans Visual Studio Installer.) Développez le nœud SQL Server . Cliquez avec le bouton droit sur votre instance LocalDB, puis sélectionnez nouvelle requête.

      Une fenêtre de l’éditeur de requête s’ouvre.

    2. Copiez le script Northwind Transact-SQL dans votre presse-papiers. Ce script T-SQL crée la base de données Northwind à partir de zéro et la remplit avec des données.

    3. Collez le script T-SQL dans l’éditeur de requête, puis choisissez le bouton Exécuter.

      Après un court laps de temps, la requête se termine et la base de données Northwind est créée.

Créer une application Windows Forms

La première étape consiste à créer une application Windows Forms (.NET Framework).

  1. Dans Visual Studio, dans le menu Fichier, sélectionnez Nouveau>Projet.

  2. Développez Visual C# ou Visual Basic dans le volet gauche, puis sélectionnez Bureau Windows.

  3. Dans le volet central, sélectionnez le type de projet d’application Windows Forms .

  4. Nommez le projet SavingDataInATransactionWalkthrough, puis choisissez OK.

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

Créer une source de données pour base de données

Cette étape utilise l’Assistant de Configuration de Source de Données pour créer une source de données basée sur les tables Customers et Orders dans l’exemple de base de données Northwind.

  1. Pour ouvrir la fenêtre Sources de données , dans le menu Données , sélectionnez 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 la source de données.

  3. Dans l’écran Choisir un type de source de données , sélectionnez Base de données, puis Sélectionnez Suivant.

  4. Dans l’écran Choisir votre connexion de données , effectuez l’une des opérations suivantes :

    • Si une connexion de données à l’échantillon de la base de données Northwind est disponible dans le menu déroulant, sélectionnez-la.

      - ou -

    • Sélectionnez Nouvelle connexion pour lancer la boîte de dialogue Ajouter/modifier la connexion et créer une connexion à la base de données Northwind.

  5. Si votre base de données nécessite un mot de passe, sélectionnez l’option pour inclure des données sensibles, puis sélectionnez Suivant.

  6. Dans l’écran Enregistrer la chaîne de connexion dans l’écran du fichier Configuration de l’application , sélectionnez Suivant.

  7. Dans l’écran Choisir vos objets de base de données , développez le nœud Tables .

  8. Sélectionnez les Customers et Orders tables, puis sélectionnez Terminer.

    NorthwindDataSet est ajouté à votre projet et les CustomersOrders tables apparaissent dans la fenêtre Sources de données.

Ajouter des contrôles au formulaire

Vous pouvez créer les contrôles liés aux données en faisant glisser des éléments de la fenêtre Sources de données vers votre formulaire.

  1. Dans la fenêtre Sources de données , développez le nœud Clients .

  2. Faites glisser le nœud Clients principal de la fenêtre Sources de données vers Form1.

    Un DataGridView contrôle et une bande d’outils (BindingNavigator) permettant de naviguer dans les enregistrements s’affichent sur le formulaire. NorthwindDataSet, CustomersTableAdapter, BindingSourceet BindingNavigator apparaît dans la barre d’état du composant.

  3. Faites glisser le nœud Orders associé (pas le nœud principal Orders, mais le nœud de table enfant associé qui se trouve sous la colonne Fax) sur le formulaire en dessous de CustomersDataGridView.

    Un DataGridView s’affiche sur le formulaire. Des éléments OrdersTableAdapter et BindingSource apparaissent dans le plateau de composants.

Ajouter 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’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, sélectionnez Ajouter une référence.

  2. Sélectionnez System.Transactions (sous l’onglet .NET ), puis sélectionnez OK.

    Une référence à System.Transactions est ajoutée au projet.

Modifier le code dans le bouton SaveItem de BindingNavigator

Pour la première table déposée dans votre formulaire, du code est ajouté par défaut à l’événement click du bouton d’enregistrement sur le BindingNavigator. Vous devez ajouter manuellement du code pour mettre à jour toutes les tables supplémentaires. Pour ce guide pas à pas, nous refactorisons le code d’enregistrement existant en dehors du gestionnaire d’événements du bouton de sauvegarde. Nous créons également quelques méthodes supplémentaires pour fournir des fonctionnalités de mise à jour spécifiques selon que la ligne doit être ajoutée ou supprimée.

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

  1. Sélectionnez le bouton Enregistrer sur CustomersBindingNavigator (bouton avec l’icône de disque de floppy).

  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();
        }
    }
    

L’ordre de rapprochement des modifications apportées aux données associées est le suivant :

  • Supprimez les enregistrements enfants. (Dans ce cas, supprimez les enregistrements de la Orders table.)

  • Supprimez les enregistrements parents. (Dans ce cas, supprimez les enregistrements de la Customers table.)

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

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

Pour supprimer des commandes existantes

  • Ajoutez la méthode suivante DeleteOrders à 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");
            }
        }
    }
    

Pour supprimer des clients existants

  • Ajoutez la méthode suivante DeleteCustomers à 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");
            }
        }
    }
    

Pour ajouter de nouveaux clients

  • Ajoutez la méthode suivante AddNewCustomers à 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");
            }
        }
    }
    

Pour ajouter de nouvelles commandes

  • Ajoutez la méthode suivante AddNewOrders à 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");
            }
        }
    }
    

Exécuter l’application

Appuyez sur F5 pour exécuter l’application.