Transactions distribuées MS DTC

Les applications écrites à l'aide d'OLE DB, ODBC (Open DataBase Connectivity), ADO (ActiveX Data Objects) ou DB-Library peuvent utiliser les transactions distribuées Transact-SQL en exécutant les instructions Transact-SQL qui permettent de démarrer et d'arrêter les transactions distribuées Transact-SQL. OLE DB et ODBC comprennent également une prise en charge de la gestion des transactions distribuées au niveau de l'API (Application Programming Interface). Les applications OLE DB et ODBC peuvent utiliser ces fonctions d'API pour gérer les transactions distribuées mettant en œuvre des gestionnaires de ressources COM (Component Object Model) autres que le Moteur de base de données SQL Server, qui prennent en charge les transactions du coordinateur de transactions distribuées Microsoft (MS DTC). Elles peuvent également utiliser les fonctions d'API pour contrôler plus précisément les limites d'une transaction distribuée mettant en œuvre plusieurs ordinateurs qui exécutent des instances du Moteur de base de données.

Transactions distribuées ODBC

Vous pouvez contrôler les transactions locales au niveau de l'API ODBC en affectant à l'attribut de connexion SQL_ATTR_AUTOCOMMIT la valeur SQL_AUTOCOMMIT_OFF, puis en appelant la fonction ODBC SQLEndTran pour valider ou restaurer chaque transaction. N'utilisez pas ces fonctions pour gérer une transaction distribuée dans une application ODBC. Utilisez plutôt les méthodes COM de MS DTC :

  • Appelez DtcGetTransactionManager pour vous connecter à MS DTC.

  • Appelez ITransactionDispenser::BeginTransaction pour démarrer la transaction distribuée et obtenir un objet de transaction.

  • Pour chaque connexion ODBC mise en jeu dans la transaction distribuée, appelez la fonction ODBC SQLSetConnectAttr en affectant la valeur SQL_COPT_SS_ENLIST_IN_DTC à fOption et l'adresse de l'objet de transaction créé par ITransactionDispenser::BeginTransaction à vParam.

  • Lorsque la transaction est terminée, appelez les méthodes ITransaction::Commit ou ITransaction::Rollback sur l'objet de transaction créé par ITransactionDispenser::BeginTransaction au lieu d'appeler la fonction ODBC SQLEndTran.

Transactions distribuées OLE DB

Le modèle de contrôle d'une transaction distribuée dans OLE DB est similaire au contrôle d'une transaction locale. Pour contrôler une transaction locale, un client OLE DB effectue les opération suivantes :

  • Il utilise la méthode ITransactionLocal::StartTransaction pour démarrer la transaction locale et obtenir un objet de transaction.

  • Il appelle alors la méthode ITransaction::Commit ou ITransaction::Rollback sur l'objet de transaction obtenu à l'aide de ITransactionLocal::StartTransaction.

Pour contrôler une transaction distribuée, le consommateur effectue les opérations suivantes :

  • Il appelle DtcGetTransactionManager pour se connecter à MS DTC.

  • Il appelle ITransactionDispenser::BeginTransaction pour démarrer la transaction distribuée et obtenir un objet de transaction.

  • Il appelle l'interface ITransactionJoin de l'objet de transaction distribuée pour chaque connexion impliquée dans la transaction distribuée.

  • Il appelle la méthode ITransaction::Commit ou ITransaction::Rollback de l'objet de transaction distribuée pour terminer la transaction.