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 CRecordset
Edit
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
, Update
et 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
, Delete
ou 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 :
Transaction : exécution d’une transaction dans un recordset (ODBC)
Transaction : répercussions des transactions sur les mises à jour (ODBC)