Partilhar via


Transações distribuídas MS DTC

Aplicativos escritos usando OLE DB, Open Database Connectivity (ODBC), ActiveX Data Objects (ADO) ou DB-Library podem usar transações distribuídas Transact-SQL emitindo instruções Transact-SQL para iniciar e interromper transações distribuídas Transact-SQL. OLE DB e ODBC também contêm suporte no nível de interface de programação de aplicativo (API) para gerenciar transações distribuídas. Os aplicativos OLE DB e ODBC podem usar essas funções API para gerenciar transações distribuídas que incluam outros gerenciadores de recursos do Component Object Model (COM) que dêem suporte a transações MS DTC (Coordenador de Transações Distribuídas da Microsoft) que não sejam do Mecanismo de Banco de Dados do SQL Server. Eles também podem usar as funções API para se obter mais controle sobre os limites de uma transação distribuída que inclua vários computadores que executam instâncias do Mecanismo de Banco de Dados.

Transações Distribuídas ODBC

Você pode controlar transações locais no nível de ODBC API definindo o atributo de conexão SQL_ATTR_AUTOCOMMIT como SQL_AUTOCOMMIT_OFF e chamando a função ODBC SQLEndTran para confirmar ou reverter cada transação. Não use essas funções para gerenciar uma transação distribuída em um aplicativo ODBC. Em vez disso, use os métodos MS DTC COM:

  • Chame DtcGetTransactionManager para conectar-se ao MS DTC.

  • Chame ITransactionDispenser::BeginTransaction para iniciar a transação distribuída e obter um objeto de transação.

  • Para cada conexão ODBC que participa da transação distribuída, chame a função ODBC SQLSetConnectAttr com fOption definido como SQL_COPT_SS_ENLIST_IN_DTC e vParam que contenha o endereço do objeto de transação de ITransactionDispenser::BeginTransaction.

  • Quando a transação for concluída, em vez de chamar a função ODBC SQLEndTran, chame os métodos ITransaction::Commit ou ITransaction::Rollback no objeto de transação obtido de ITransactionDispenser::BeginTransaction.

Transações distribuídas OLE DB

O modelo para controlar uma transação distribuída no OLE DB é semelhante a controlar uma transação local. Para controlar uma transação local, um consumidor OLE DB:

  • Usa o método ITransactionDispenser::StartTransaction para iniciar a transação local e obter um objeto de transação.

  • Chama os métodos ITransaction::Commit ou ITransaction::Rollback sobre o objeto de transação obtido por ITransactionLocal::StartTransaction.

Para controlar uma transação distribuída, o consumidor:

  • Chama DtcGetTransactionManager para conectar-se ao MS DTC.

  • Chama ITransactionDispenser::BeginTransaction para iniciar a transação distribuída e obter um objeto de transação.

  • Chama a interface ITransactionJoin do objeto de transação distribuída para cada conexão que participa da transação distribuída.

  • Chama os métodos ITransaction::Commit ou ITransaction::Rollback do objeto de transação distribuída para concluir a transação.