Partager via


Procédure pas à pas : enregistrement de données dans une base de données (plusieurs tables)

 

Date de publication : mars 2016

L'un des scénarios les plus courants dans le développement d'applications consiste à afficher des données dans un formulaire d'une application Windows, à modifier ces données, puis à renvoyer les données mises à jour à la base de données. Cette procédure pas à pas crée un formulaire affichant les données de deux tables associées et indique comment modifier les enregistrements et enregistrer les modifications dans la base de données. Cet exemple utilise les tables Customers et Orders de l'exemple de base de données Northwind.

Vous pouvez enregistrer des données de votre application dans la base de données en appelant la méthode Update d'un TableAdapter. Quand vous faites glisser des éléments depuis la fenêtre Sources de données, du code permettant d'enregistrer les données est automatiquement ajouté pour la première table déplacée dans un formulaire. Toutes les tables supplémentaires ajoutées à un formulaire requièrent l'ajout manuel du code requis pour enregistrer les données. Cette procédure pas à pas indique comment ajouter du code pour enregistrer les mises à jour de plusieurs tables.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Customizing Development Settings in Visual Studio.

Cette procédure pas à pas décrit notamment les tâches suivantes :

Composants requis

Pour exécuter cette procédure pas à pas, vous avez besoin des éléments suivants :

Création de l'application Windows

La première étape consiste à créer une application Windows. L'attribution d'un nom au projet est facultative à ce stade, mais nous allons lui en donner un car nous avons l'intention de l'enregistrer ultérieurement.

Pour créer le projet d'application Windows

  1. Dans le menu Fichier, créez un nouveau projet.

  2. Attribuez le nom UpdateMultipleTablesWalkthrough au projet.

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

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

Création de la source de données

Cette étape crée une source de données à partir de la base de données Northwind à l'aide de l'Assistant Configuration de source de données. Vous devez avoir accès à l'exemple de base de données Northwind pour créer la connexion. 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.

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, cliquez sur 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 ouvrir la boîte de dialogue Ajouter/Modifier la connexion.

  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 apparaissent dans la fenêtre Sources de données.

Définition des contrôles à créer

Pour cette procédure pas à pas, les données de la table Customers sont présentées dans une vue Détails où les données sont affichées dans des contrôles individuels. Les données de la table Orders sont présentées dans une vue Grille affichée dans un contrôle DataGridView.

Pour définir le type de déplacement des éléments de la fenêtre Sources de données

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

  2. Remplacez le contrôle de la table Customers par des contrôles individuels en sélectionnant Détails dans la liste de contrôles du nœud Customers. Pour plus d'informations, consultez Définir le contrôle à créer lors d’une opération de glisser-déplacer à partir de la fenêtre Sources de données.

Création du formulaire lié aux données

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ôlés liés aux données dans le formulaire

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

    Les contrôles liés aux données assortis d'étiquettes descriptives apparaissent dans le formulaire, ainsi qu'une barre d'outils (BindingNavigator) pour parcourir les enregistrements. NorthwindDataSet, CustomersTableAdapter, BindingSource et BindingNavigator s'affichent dans la barre d'état des composants.

  2. Faites glisser le nœud Orders associé depuis la fenêtre Sources de données vers Form1.

    Notes

    Le nœud Orders associé est situé sous la colonne Fax et constitue un nœud enfant du nœud Customers.

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

Ajout de code pour mettre à jour la base de données

Vous pouvez mettre à jour la base de données en appelant les méthodes Update des TableAdapters Customers et Orders. Par défaut, un gestionnaire d'événements est ajouté au code du formulaire pour le bouton Enregistrer de BindingNavigator afin d'envoyer des mises à jour à la base de données. Cette procédure modifie ce code pour envoyer les mises à jour dans l'ordre approprié afin d'éliminer le risque de lever des erreurs d'intégrité référentielle. Le code implémente également la gestion des erreurs en enveloppant l'appel de mise à jour dans un bloc try-catch. Vous pouvez modifier le code pour répondre aux besoins de votre application.

Notes

Dans un souci de clarté, cette procédure pas à pas n'utilise pas de transaction, mais si vous mettez à jour au moins deux tables associées, vous devez inclure toute la logique de mise à jour dans une transaction. Une transaction est un processus qui garantit que toutes les modifications associées apportées à une base de données sont réussies avant de les valider. Pour plus d'informations, consultez Transactions et concurrence.

Pour ajouter une logique de mise à jour à l'application

  1. Double-cliquez sur le bouton Enregistrer de BindingNavigator pour ouvrir l'Éditeur de code sur le gestionnaire d'événements bindingNavigatorSaveItem_Click.

  2. Remplacez le code dans le gestionnaire d'événements pour appeler les méthodes Update des TableAdapters associés. Le code suivant crée d'abord trois tables de données temporaires pour contenir les informations mises à jour pour chaque DataRowState (Deleted, Added et Modified). Les mises à jour sont ensuite exécutées dans l'ordre approprié. Le code doit se présenter comme suit :

                this.Validate();
                this.ordersBindingSource.EndEdit();
                this.customersBindingSource.EndEdit();
    
                NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
                NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
                NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
                try
                {
                    // Remove all deleted orders from the Orders table.
                    if (deletedOrders != null)
                    {
                        ordersTableAdapter.Update(deletedOrders);
                    }
    
                    // Update the Customers table.
                    customersTableAdapter.Update(northwindDataSet.Customers);
    
                    // Add new orders to the Orders table.
                    if (newOrders != null)
                    {
                        ordersTableAdapter.Update(newOrders);
                    }
    
                    // Update all modified Orders.
                    if (modifiedOrders != null)
                    {
                        ordersTableAdapter.Update(modifiedOrders);
                    }
    
                    northwindDataSet.AcceptChanges();
                }
    
                catch (System.Exception ex)
                {
                    MessageBox.Show("Update failed");
                }
    
                finally
                {
                    if (deletedOrders != null)
                    {
                        deletedOrders.Dispose();
                    }
                    if (newOrders != null)
                    {
                        newOrders.Dispose();
                    }
                    if (modifiedOrders != null)
                    {
                        modifiedOrders.Dispose();
                    }
                }
    
            Me.Validate()
            Me.OrdersBindingSource.EndEdit()
            Me.CustomersBindingSource.EndEdit()
    
            Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
            Dim newOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
            Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
    
            Try
                ' Remove all deleted orders from the Orders table.
                If Not deletedOrders Is Nothing Then
                    OrdersTableAdapter.Update(deletedOrders)
                End If
    
                ' Update the Customers table.
                CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
                ' Add new orders to the Orders table.
                If Not newOrders Is Nothing Then
                    OrdersTableAdapter.Update(newOrders)
                End If
    
                ' Update all modified Orders.
                If Not modifiedOrders Is Nothing Then
                    OrdersTableAdapter.Update(modifiedOrders)
                End If
    
                NorthwindDataSet.AcceptChanges()
    
            Catch ex As Exception
                MsgBox("Update failed")
    
            Finally
                If Not deletedOrders Is Nothing Then
                    deletedOrders.Dispose()
                End If
    
                If Not newOrders Is Nothing Then
                    newOrders.Dispose()
                End If
    
                If Not modifiedOrders Is Nothing Then
                    modifiedOrders.Dispose()
                End If
            End Try
    

Test de l'application

Pour tester l'application

  1. Appuyez sur F5.

  2. Apportez quelques modifications aux données d'un ou plusieurs enregistrements dans chaque table.

  3. Appuyez sur le bouton Enregistrer.

  4. Vérifiez les valeurs figurant dans la base de données pour confirmer que les modifications ont bien été enregistrées.

Étapes suivantes

Selon les spécifications de votre application, vous pouvez exécuter différentes étapes après la création d'un formulaire lié aux données dans votre application Windows. Vous pouvez apporter à cette procédure pas à pas les améliorations suivantes :

Voir aussi

Procédures pas à pas relatives aux données
Liaison de contrôles Windows Forms à des données dans Visual Studio
Vue d'ensemble d'applications de données dans Visual Studio
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