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
, UpdateCommand
ou 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 DeleteCommand
propriétés , InsertCommand
et 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 Update
et 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 , DataTable
ou DataRow
entraîne le DataSet
remplacement 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