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 capacités transactionnelles de votre source de données, l’objet Connection vous permet également de créer et gérer des transactions. Par exemple, en utilisant le 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 d’une source de données résultant d’opérations d’une transaction aboutissent toutes 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’avait 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, CommitTrans et 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 compte et ajoutez le même montant à l’autre. Si une mise à jour échoue, les comptes ne sont plus équilibrés. L’apport de ces modifications dans le cadre d’une transaction ouverte garantit que toutes les modifications seront appliquées, ou qu’aucune ne le sera.

Notes

Certains fournisseurs ne prennent pas en charge les transactions. Vérifiez que la propriété définie par le fournisseur « Transaction DDL » figure dans la collection Properties de l’objet Connection, 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 que vous avez appelé la méthode BeginTrans, le fournisseur ne valide plus instantanément les modifications que vous apportez jusqu’à ce que vous appeliez la méthode CommitTrans ou RollbackTrans pour mettre fin à la transaction.

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

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

Niveau d’isolation de la transaction

Utilisez la propriété IsolationLevel pour définir le niveau d’isolation d’une transaction sur un objet Connection. Le paramètre ne prendra effet que la prochaine fois que vous appellerez la méthode BeginTrans. Si le niveau d’isolation que vous demandez est indisponible, le fournisseur peut retourner le niveau d’isolation immédiatement supérieur. Pour plus d’informations sur les valeurs valides, reportez-vous à la propriété IsolationLevel dans le Guide de référence du programmeur ADO.

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 : la valeur de retour « 1 » indique que vous avez ouvert une transaction de niveau supérieur (autrement dit, une transaction non imbriquée dans une autre), la valeur « 2 » que vous avez ouvert une transaction de deuxième niveau (transaction imbriquée dans une transaction de niveau supérieur), et ainsi de suite. L’appel de la méthode CommitTrans ou RollbackTrans affectant uniquement la transaction ouverte le plus récemment, vous devez fermer ou restaurer la transaction actuelle avant de pouvoir résoudre toute transaction de niveau supérieur.