Partager via


Transaction (ODBC)

Cette rubrique s’applique aux classes ODBC MFC.

Une transaction est un moyen de regrouper, ou de traiter par lots, une série de mises à jour vers une source de données afin que toutes soient validées en même temps ou qu’aucune n’est validée si vous restaurez la transaction. Si vous n’utilisez pas de transaction, les modifications apportées à la source de données sont validées automatiquement au lieu d’être validées à la demande.

Remarque

Tous les pilotes de base de données ODBC ne prennent pas en charge les transactions. Appelez la CanTransact fonction membre de votre objet CDatabase ou CRecordset pour déterminer si votre pilote prend en charge les transactions pour une base de données donnée. Notez que CanTransact ne vous indique pas si la source de données fournit une prise en charge complète des transactions. Vous devez également appeler CDatabase::GetCursorCommitBehavior et CDatabase::GetCursorRollbackBehavior après CommitTrans et après et Rollback case activée l’effet de la transaction sur l’objet ouvertCRecordset.

Les appels aux AddNew fonctions membres d’un CRecordsetEdit objet affectent immédiatement la source de données lorsque vous appelez Update. Delete les appels prennent également effet immédiatement. En revanche, vous pouvez utiliser une transaction composée de plusieurs appels à AddNew, Edit, Updateet Delete, qui sont effectués, mais qui ne sont pas validés tant que vous n’appelez CommitTrans pas explicitement. En établissant une transaction, vous pouvez exécuter une série de ces appels tout en conservant la possibilité de les restaurer. Si une ressource critique n’est pas disponible ou si une autre condition empêche la fin de la transaction entière, vous pouvez restaurer la transaction au lieu de la valider. Dans ce cas, aucune des modifications appartenant à la transaction n’affecte la source de données.

Remarque

Actuellement, la classe CRecordset ne prend pas en charge les mises à jour de la source de données si vous avez implémenté la récupération de lignes en bloc. Cela signifie que vous ne pouvez pas effectuer d’appels à AddNew, Edit, Deleteou Update. Toutefois, vous pouvez écrire vos propres fonctions pour effectuer des mises à jour, puis appeler ces fonctions dans une transaction donnée. Pour plus d’informations sur l’extraction de lignes en bloc, consultez Recordset : Extraction d’enregistrements en bloc (ODBC).

Remarque

En plus d’affecter votre jeu d’enregistrements, les transactions affectent les instructions SQL que vous exécutez directement tant que vous utilisez odbc HDBC associé à votre CDatabase objet ou à un HSTMT ODBC basé sur ce hdBC.

Les transactions sont particulièrement utiles lorsque vous avez plusieurs enregistrements qui doivent être mis à jour simultanément. Dans ce cas, vous souhaitez éviter une transaction semi-terminée, par exemple si une exception a été levée avant la dernière mise à jour. Le regroupement de ces mises à jour dans une transaction permet une récupération (restauration) des modifications et retourne les enregistrements à l’état de prétransaction. Par exemple, si une banque transfère l’argent du compte A au compte B, le retrait d’A et le dépôt vers B doit réussir à traiter correctement les fonds ou toute la transaction doit échouer.

Dans les classes de base de données, vous effectuez des transactions via CDatabase des objets. Un CDatabase objet représente une connexion à une source de données, et un ou plusieurs recordsets associés à cet CDatabase objet fonctionnent sur des tables de la base de données via des fonctions membres d’recordset.

Remarque

Un seul niveau de transactions est pris en charge. Vous ne pouvez pas imbriquer des transactions et une transaction s’étend sur plusieurs objets de base de données.

Les rubriques suivantes fournissent plus d’informations sur la façon dont les transactions sont effectuées :

Voir aussi

ODBC (Open Database Connectivity)