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

Mise à jour : novembre 2007

L'un des scénarios les plus courants lors du développement d'applications consiste à afficher des données sur un formulaire, à les modifier et à renvoyer les données mises à jour à la base de données. Cette procédure pas à pas crée un formulaire qui affiche des données provenant de deux tables connexes et indique comment modifier les enregistrements, puis 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 les données de votre application dans la base de données en appelant la méthode Update d'un TableAdapter. Lorsque vous faites glisser des éléments depuis la fenêtre Sources de données, le code permettant d'enregistrer les données est automatiquement ajouté pour la première table déplacée jusqu'à un formulaire. Toutes les tables supplémentaires ajoutées à un formulaire exigent l'ajout manuel de tout code nécessaire à l'enregistrement de données. Cette procédure pas à pas montre comment ajouter le code permettant d'enregistrer les mises à jour de plusieurs tables.

Remarque :

Les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide selon vos paramètres actifs ou votre édition. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Cette procédure pas à pas illustre les tâches suivantes :

Composants requis

Pour exécuter cette procédure pas à pas, vous devrez :

Création de l'application Windows

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

Pour créer le nouveau projet Application Windows

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

  2. Nommez le projet UpdateMultipleTablesWalkthrough.

  3. Sélectionnez Application Windows, puis cliquez sur OK. Pour plus d'informations, consultez Création d'applications Windows.

    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 l'installation 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. Pour plus d'informations, consultez Ajouter/Modifier une connexion, boîte de dialogue (Général).

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

Définition des contrôles à créer

Dans le cadre de cette procédure pas à pas, les données contenues dans la table Customers se présentent selon une présentation Détails où elles sont affichées dans les contrôles individuels. Les données de la table Orders se présentent selon une présentation Grille où elles sont affichées dans un contrôle DataGridView.

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

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

  2. Modifiez le type de déplacement de la table Customers en fonction de contrôles individuels en sélectionnant Détails dans la liste de contrôles du nœud Customers. Pour plus d'informations, consultez Comment : 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

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 formulaire

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

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

  2. Faites glisser le nœud Orders connexe depuis la fenêtre Sources de données jusqu'à Form1.

    Remarque :

    Le nœud Orders connexe se trouve sous la colonne Fax et est un nœud enfant du nœud Customers.

    Un contrôle DataGridView et une barre d'outils (BindingNavigator) de navigation au sein des enregistrements apparaissent sur le formulaire. Un OrdersTableAdapter et un BindingSource apparaissent dans la barre d'état des composants.

Ajout du code permettant de 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 pour le bouton Enregistrer de BindingNavigator est ajouté au code du formulaire afin d'envoyer les mises à jour à la base de données. Cette procédure pas à pas modifie ce code pour envoyer les mises à jour dans l'ordre approprié afin d'éliminer toute possibilité de déclenchement d'erreurs d'intégrité référentielle. Ce code implémente également la gestion des erreurs en encapsulant l'appel de mise à jour dans un bloc try-catch. Vous pouvez modifier le code pour l'adapter aux besoins de votre application.

Remarque :

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

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

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

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

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

Test de l'application

Pour tester l'application

  1. Appuyez sur F5.

  2. Modifiez les données d'un ou plusieurs enregistrements dans chaque table.

  3. Cliquez sur le bouton Enregistrer.

  4. Vérifiez les valeurs contenues dans la base de données pour vérifier que les modifications ont été enregistrées.

Étapes suivantes

Selon les exigences 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

Concepts

Nouveautés des données

Vue d'ensemble de l'affichage des données

Autres ressources

Procédures pas à pas relatives aux données

Mise en route avec l'accès aux données

Connexion aux données dans Visual Studio

Préparation de votre application pour recevoir des données

Extraction de données dans votre application

Affichage des données sur des formulaires dans les applications Windows

Modification des données dans votre application

Validation des données

Enregistrement des données