Mise à jour de la base de données DB2 avec un adaptateur de données et le jeu de données

La Update méthode de MsDb2DataAdapter est appelée pour résoudre les modifications d’un jeu de données à la source de données. La Update méthode, comme la Fill méthode, prend comme arguments un instance de DataSet, et un objet ou DataTable un nom facultatifDataTable. Le DataSet instance est l’objet DataSet qui contient les modifications qui ont été apportées, et l’objet DataTable identifie la table à partir de laquelle récupérer les modifications.

Appel de la méthode Update

Lorsque vous appelez la Update méthode, MsDb2DataAdapter analyse les modifications qui ont été apportées et exécute la commande appropriée (INSERT, UPDATE ou DELETE). Lorsque le MsDb2DataAdapter rencontre une modification d’une ligne de données, il utilise InsertCommand, UpdateCommandou DeleteCommand pour traiter la modification. Cela vous permet d’optimiser les performances de votre application ADO.NET en spécifiant la syntaxe de commande au moment de la conception et, si possible, avec des procédures stockées. Vous devez explicitement définir les commandes avant d'appeler la méthode Update. Si Update est appelé et que la commande appropriée n’existe pas pour une mise à jour particulière (par exemple, non DeleteCommand pour les lignes supprimées), une exception est levée. Vous pouvez utiliser des paramètres de commande pour spécifier des valeurs d’entrée et de sortie pour une instruction SQL ou une procédure stockée pour chaque ligne modifiée dans un jeu de données.

Si votre DataTable objet est mappé à ou est généré à partir d’une table de base de données unique, vous pouvez tirer parti de l’objet MsDb2CommandBuilder pour générer automatiquement les DeleteCommandpropriétés , InsertCommandet UpdateCommand de l’objet MsDb2DataAdapter .

Mise à jour des jeux de données

La Update méthode résout les modifications apportées à la source de données ; toutefois, d’autres clients peuvent avoir modifié les données au niveau de la source de données depuis la dernière fois que vous avez rempli le jeu de données. Pour mettre à jour votre jeu de données avec les données actuelles, utilisez la MsDb2DataAdapter méthode et Fill . De nouvelles lignes sont ajoutées à la table et les informations mises à jour sont incorporées dans les lignes existantes. La Fill méthode détermine si une nouvelle ligne sera ajoutée ou si une ligne existante sera mise à jour en examinant les valeurs de clé primaire des lignes du jeu de données et les lignes retournées par SelectCommand. Si la Fill méthode rencontre une valeur de clé primaire pour une ligne du jeu de données qui correspond à une valeur de clé primaire d’une ligne dans les résultats retournés par SelectCommand, elle met à jour la ligne existante avec les informations de la ligne retournée par SelectCommand et définit la RowState propriété de la ligne existante sur Unchanged. Si une ligne retournée par SelectCommand a une valeur de clé primaire qui ne correspond à aucune des valeurs de clé primaire des lignes du jeu de données, la Fill méthode ajoute une nouvelle ligne avec un RowState de Unchanged.

Notes

Si SelectCommand retourne les résultats d’une JOINTURE EXTERNE, l’objet DataAdapter ne définit pas de valeur PrimaryKey pour l’objet résultant DataTable . Vous devez définir vous-même primaryKey pour vous assurer que les lignes en double sont résolues correctement.

Pour gérer les exceptions qui peuvent se produire lorsque vous appelez la Update méthode, vous pouvez utiliser l’événement RowUpdated pour répondre aux erreurs de mise à jour de ligne à mesure qu’elles se produisent, ou vous pouvez définir DataAdapter.ContinueUpdateOnError sur true avant d’appeler Updateet répondre aux informations d’erreur stockées dans la RowError propriété d’une ligne particulière lorsque la mise à jour est terminée.

Notes

L’appel AcceptChanges des objets , DataTableou DataRow entraîne le DataSetremplacement de toutes les valeurs d’origine d’une ligne de données par les valeurs actuelles de la ligne de données. Si les valeurs de champ qui identifient la ligne comme unique ont été modifiées, après avoir appelé AcceptChanges, les valeurs d’origine ne correspondent plus aux valeurs de la source de données.

Utilisation de colonnes d’incrémentation automatique

Si les tables de votre source de données ont des colonnes d’incrémentation automatique, vous pouvez remplir les colonnes de votre jeu de données soit en retournant la valeur d’incrément automatique en tant que paramètre de sortie d’une procédure stockée et en la mappant à une colonne d’une table, soit en utilisant l’événement RowUpdated de .MsDb2DataAdapter

Toutefois, les valeurs de votre jeu de données peuvent devenir non synchronisées avec les valeurs de la source de données et entraîner un comportement inattendu. Par exemple, considérez une table qui a une colonne de clé primaire à incrémentation automatique de CustomerID. Si vous ajoutez deux nouveaux clients dans le jeu de données, ils reçoivent des valeurs CustomerId incrémentées automatiquement de 1 et 2. Lorsque la deuxième ligne client est passée à la Update méthode de MsDb2DataAdapter, la ligne nouvellement ajoutée reçoit une valeur CustomerID incrémentée automatiquement de 1 à la source de données, ce qui ne correspond pas à la valeur, 2, dans le jeu de données. Lorsque le MsDb2DataAdapter remplit la ligne dans le jeu de données avec la valeur retournée, une violation de contrainte se produit, car la première ligne du client a déjà un CustomerID de 1.

Pour éviter ce comportement, nous vous recommandons, lorsque vous utilisez des colonnes à incrémentation automatique sur une source de données et des colonnes d’incrémentation automatique dans un jeu de données, de créer la colonne dans le jeu de données avec un AutoIncrementStep de -1 et un AutoIncrementSeed de 0, et de vous assurer que votre source de données génère des valeurs d’identité à incrémentation automatique commençant à 1 et incrémentant avec une valeur d’étape positive. Par conséquent, le jeu de données génère des nombres négatifs pour les valeurs incrémentées automatiquement qui n’entrent pas en conflit avec les valeurs d’incrément automatique positives générées par la source de données. Une autre option consiste à utiliser des colonnes de type Guid au lieu de colonnes à incrémentation automatique. L’algorithme qui génère des valeurs ne doit jamais Guid générer le même Guid dans le jeu de données que celui généré par la source de données.

Dans de nombreuses circonstances, l’ordre dans lequel les modifications apportées par le jeu de données sont envoyées à la source de données est importante. Par exemple, si une valeur de clé primaire pour une ligne existante est mise à jour et qu’une nouvelle ligne a été ajoutée avec la nouvelle valeur de clé primaire, il est important de traiter la mise à jour avant l’insertion.

Vous pouvez utiliser la Select méthode de l’objet DataTable pour renvoyer un DataRow tableau qui référence uniquement des lignes avec un particulier RowState. Vous pouvez ensuite passer le tableau DataRow retourné à la méthode Update du MsDb2DataAdapter pour traiter les lignes modifiées. En spécifiant un sous-ensemble des lignes à mettre à jour, vous pouvez contrôler l'ordre dans lequel les insertions, mises à jour et suppressions sont traitées.

Voir aussi

Utilisation de DataAdapter et de DataSet pour une base de données DB2