Partager via


Traitement des transactions

Une transaction délimite le début et la fin d’une série d’opérations d’accès aux données exécutées sur une connexion. Sous réserve des fonctionnalités transactionnelles de votre source de données, l’objet Connection vous permet également de créer et de gérer des transactions. Par exemple, à l’aide du fournisseur Microsoft OLE DB pour SQL Server pour accéder à une base de données sur Microsoft SQL Server, vous pouvez créer plusieurs transactions imbriquées pour les commandes que vous exécutez.

ADO garantit que les modifications apportées à une source de données résultant d’opérations dans une transaction se produisent correctement ensemble ou pas du tout.

Si vous annulez la transaction ou si l’une de ses opérations échoue, le résultat sera comme si aucune des opérations de la transaction n’a eu lieu. La source de données restera telle qu’elle était avant le début de la transaction.

ADO fournit les méthodes suivantes pour contrôler les transactions : BeginTrans, CommitTranset RollbackTrans. Utilisez ces méthodes avec un objet Connection lorsque vous souhaitez enregistrer ou annuler une série de modifications apportées aux données sources en tant qu’unité unique. Par exemple, pour transférer de l’argent entre comptes, vous soustrayez un montant d’un montant et ajoutez le même montant à l’autre. Si l’une des mises à jour échoue, les comptes ne sont plus soldes. Effectuer ces modifications dans une transaction ouverte garantit que toutes ou aucune des modifications ne sont réalisées.

Note

Tous les fournisseurs ne prennent pas en charge les transactions. Vérifiez que la propriété définie par le fournisseur «Transaction DDL» apparaît dans la collection Connection de l’objet Properties, indiquant que le fournisseur prend en charge les transactions. Si le fournisseur ne prend pas en charge les transactions, l’appel de l’une de ces méthodes retourne une erreur.

Après avoir appelé la méthode BeginTrans, le fournisseur ne valide plus instantanément les modifications que vous apportez jusqu’à ce que vous appeliez CommitTrans ou RollbackTrans pour mettre fin à la transaction.

L’appel de la méthode CommitTrans enregistre les modifications apportées dans une transaction ouverte sur la connexion et met fin à la transaction. L’appel de la méthode RollbackTrans inverse toutes les modifications apportées dans une transaction ouverte et met fin à la transaction. L’appel de l’une ou l’autre méthode lorsqu’aucune transaction ouverte ne génère une erreur.

En fonction de la propriété Attributes de l'objet Connection, l'appel des méthodes CommitTrans ou RollbackTrans peut démarrer automatiquement une nouvelle transaction. Si la propriété Attributs de est définie sur adXactCommitRetaining, le fournisseur démarre automatiquement une nouvelle transaction après un appel de CommitTrans. Si la propriété Attributes est définie sur adXactAbortRetaining, le fournisseur démarre automatiquement une nouvelle transaction après un appel RollbackTrans.

Niveau d’isolation des transactions

Utilisez la propriété IsolationLevel pour définir le niveau d’isolation d’une transaction sur un objet Connection. Le paramètre ne prend effet qu’à la prochaine fois que vous appelez la méthode BeginTrans . Si le niveau d’isolation que vous demandez n’est pas disponible, le fournisseur peut retourner le niveau d’isolation supérieur suivant. Reportez-vous à la propriété IsolationLevel dans la référence du programmeur ADO pour plus d’informations sur les valeurs valides.

Transactions imbriquées

Pour les fournisseurs qui prennent en charge les transactions imbriquées, l’appel de la méthode BeginTrans dans une transaction ouverte démarre une nouvelle transaction imbriquée. La valeur de retour indique le niveau d’imbrication : une valeur de retour de « 1 » indique que vous avez ouvert une transaction de niveau supérieur (autrement dit, la transaction n’est pas imbriquée dans une autre transaction), « 2 » indique que vous avez ouvert une transaction de deuxième niveau (une transaction imbriquée dans une transaction de niveau supérieur), etc. L’appel CommitTrans ou RollbackTrans affecte uniquement la transaction la plus récente ouverte ; vous devez fermer ou restaurer la transaction actuelle avant de pouvoir résoudre les transactions de niveau supérieur.