Partager via


Comment : mettre à jour les données à l'aide d'un TableAdapter

 

Date de publication : mars 2016

Lorsque les données contenues dans votre groupe de données ont été modifiées et validées, vous souhaiterez probablement renvoyer les données mises à jour vers une base de données. Pour envoyer les données modifiées à une base de données, vous appelez la méthode Update d'un TableAdapter. La méthode Update de l'adaptateur met à jour une table de données unique et exécute la commande correcte (INSERT, UPDATE ou DELETE) en fonction du RowState de chaque ligne de données contenue dans la table. Lorsque vous enregistrez des données dans des tables connexes, Visual Studio fournit un composant TableAdapterManager qui aide à effectuer des enregistrements dans l'ordre approprié selon les contraintes de clé étrangère définies dans la base de données. Pour plus d'informations, consultez Vue d'ensemble de la mise à jour hiérarchique.

Notes

Étant donné que la tentative de mise à jour d'une source de données avec le contenu d'un groupe de données peut entraîner des erreurs, il est conseillé de placer le code qui appelle la méthode Update de l'adaptateur dans un bloc try/catch.

La procédure exacte de mise à jour d'une source de données varie en fonction des besoins de votre entreprise, mais votre application doit comprendre les étapes suivantes :

  1. Appelez la méthode Update de l'adaptateur dans un bloc try/catch.

  2. Si une exception est interceptée, rechercher la ligne de données ayant provoqué l'erreur. Pour plus d'informations, consultez Comment : trouver des lignes contenant des erreurs.

  3. Résolvez le problème dans la ligne de données (par programmation si possible ou en affichant la ligne non valide pour que l'utilisateur la modifie), puis retentez la mise à jour (HasErrors, GetErrors).

Enregistrement des données dans une base de données

Appelez la méthode Update d'un TableAdapter en passant le nom de la table de données contenant les valeurs à écrire dans la base de données.

Pour mettre à jour une base de données avec un groupe de données à l'aide d'un TableAdapter

  • Insérez la méthode Update de l'adaptateur dans un bloc try/catch. L'exemple suivant illustre une tentative de mise à jour depuis un bloc try/catch avec le contenu de la table Customers dans NorthwindDataSet.

                try
                {
                    this.Validate();
                    this.customersBindingSource.EndEdit();
                    this.customersTableAdapter.Update(this.northwindDataSet.Customers);
                    MessageBox.Show("Update successful");
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Update failed");
                }
    
            Try
                Me.Validate()
                Me.CustomersBindingSource.EndEdit()
                Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
                MsgBox("Update successful")
    
            Catch ex As Exception
                MsgBox("Update failed")
            End Try
    

Mise à jour de deux tables connexes dans un groupe de données avec un TableAdapter

Lors de la mise à jour de tables connexes dans un groupe de données, il est important de respecter l'ordre afin de réduire les risques de non respect des contraintes d'intégrité référentielle. L'ordre d'exécution des commandes respectera également les indices du DataRowCollection contenu dans le groupe de données. Pour éviter le déclenchement d'erreurs d'intégrité des données, il est recommandé de mettre à jour la base de données en respectant la séquence suivante :

  1. Table enfant : suppression des enregistrements.

  2. Table parente : insertion, mise à jour et suppression des enregistrements.

  3. Table enfant : insertion et mise à jour des enregistrements.

    Notes

    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 appliquées avec succès avant de valider toute modification. Pour plus d'informations, consultez Transactions et concurrence.

Pour mettre à jour deux tables connexes à l'aide d'un TableAdapter

  1. Créez trois tables de données temporaires qui contiendront les différents enregistrements.

  2. Appelez la méthode Update pour chaque sous-ensemble de lignes à partir d'un bloc try/catch. Si des erreurs de mise à jour se produisent, vous devez vous débrancher et les résoudre.

  3. Validez les modifications apportées à la base de données.

  4. Éliminez les tables de données temporaires pour libérer les ressources.

    L'exemple suivant montre comment mettre à jour une source de données à l'aide d'un groupe de données contenant des tables connexes.

            void UpdateDB()
            {
                NorthwindDataSet.OrdersDataTable deletedChildRecords = 
                    (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
                NorthwindDataSet.OrdersDataTable newChildRecords = 
                    (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
                NorthwindDataSet.OrdersDataTable modifiedChildRecords = 
                    (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
                try
                {
                    if (deletedChildRecords != null)
                    {
                        ordersTableAdapter.Update(deletedChildRecords);
                    }
    
                    customersTableAdapter.Update(northwindDataSet.Customers);
    
                    if (newChildRecords != null)
                    {
                        ordersTableAdapter.Update(newChildRecords);
                    }
    
                    if (modifiedChildRecords != null)
                    {
                        ordersTableAdapter.Update(modifiedChildRecords);
                    }
    
                    northwindDataSet.AcceptChanges();
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show("An error occurred during the update process");
                    // Add code to handle error here.
                }
    
                finally
                {
                    if (deletedChildRecords != null)
                    {
                        deletedChildRecords.Dispose();
                    }
                    if (newChildRecords != null)
                    {
                        newChildRecords.Dispose();
                    }
                    if (modifiedChildRecords != null)
                    {
                        modifiedChildRecords.Dispose();
                    }
                }
            }
    
        Private Sub UpdateDB()
            Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable =
                CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
            Dim newChildRecords As NorthwindDataSet.OrdersDataTable =
                CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
            Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable =
                CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
            Try
                If deletedChildRecords IsNot Nothing Then
                    OrdersTableAdapter.Update(deletedChildRecords)
                End If
    
                CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
                If newChildRecords IsNot Nothing Then
                    OrdersTableAdapter.Update(newChildRecords)
                End If
    
                If modifiedChildRecords IsNot Nothing Then
                    OrdersTableAdapter.Update(modifiedChildRecords)
                End If
    
                NorthwindDataSet.AcceptChanges()
    
            Catch ex As Exception
                MessageBox.Show("An error occurred during the update process")
                ' Add code to handle error here.
    
            Finally
                If deletedChildRecords IsNot Nothing Then
                    deletedChildRecords.Dispose()
                End If
    
                If newChildRecords IsNot Nothing Then
                    newChildRecords.Dispose()
                End If
    
                If modifiedChildRecords IsNot Nothing Then
                    modifiedChildRecords.Dispose()
                End If
    
            End Try
        End Sub
    

Voir aussi

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