Validation et annulation des transactions
Pour valider ou restaurer une transaction en mode de validation manuelle, une application appelle SQLEndTran. Les pilotes pour les SGBD qui prennent en charge les transactions implémentent généralement cette fonction en exécutant une instruction COMMIT ou ROLLBACK . Le Gestionnaire de pilotes n’appelle pas SQLEndTran lorsque la connexion est en mode de validation automatique ; il retourne simplement SQL_SUCCESS, même si l’application tente de restaurer la transaction. Étant donné que les pilotes pour les SGBD qui ne prennent pas en charge les transactions sont toujours en mode de validation automatique, ils peuvent implémenter SQLEndTran pour retourner SQL_SUCCESS sans rien faire ou ne pas l’implémenter du tout.
Remarque
Les applications ne doivent pas valider ou restaurer les transactions en exécutant des instructions COMMIT ou ROLLBACK avec SQLExecute ou SQLExecDirect. Les effets de cette opération ne sont pas définis. Les problèmes possibles incluent le pilote qui ne sait plus quand une transaction est active et ces instructions échouent sur des sources de données qui ne prennent pas en charge les transactions. Ces applications doivent appeler SQLEndTran à la place.
Si une application transmet le handle d’environnement à SQLEndTran , mais ne transmet pas de handle de connexion, le Gestionnaire de pilotes appelle conceptuellement SQLEndTran avec le handle d’environnement pour chaque pilote disposant d’une ou plusieurs connexions actives dans l’environnement. Le pilote valide ensuite les transactions sur chaque connexion dans l’environnement. Toutefois, il est important de se rendre compte que ni le pilote ni le gestionnaire de pilotes n’effectuent une validation en deux phases sur les connexions dans l’environnement ; il s’agit simplement d’une commodité de programmation pour appeler simultanément SQLEndTran pour toutes les connexions dans l’environnement.
(Une validation en deux phases est généralement utilisée pour valider les transactions réparties entre plusieurs sources de données. Dans sa première phase, les sources de données sont interrogées pour déterminer s’ils peuvent valider leur partie de la transaction. Dans la deuxième phase, la transaction est réellement validée sur toutes les sources de données. Si des sources de données répondent dans la première phase qu’elles ne peuvent pas valider la transaction, la deuxième phase ne se produit pas.)