Share via


Transacciones distribuidas de MS DTC

Las aplicaciones escritas con OLE DB, ODBC (conectividad abierta de bases de datos), Objetos de datos ActiveX (ADO) o DB-Library pueden utilizar transacciones distribuidas Transact-SQL; para ello, se emiten instrucciones Transact-SQL para iniciar y detener las transacciones distribuidas Transact-SQL. OLE DB y ODBC también son compatibles con el nivel de API (interfaz de programación de aplicaciones) para administrar transacciones distribuidas. Las aplicaciones OLE DB y ODBC pueden utilizar estas funciones de la API para administrar transacciones distribuidas que incluyen otros administradores de recursos de COM (Modelo de objetos componentes) compatibles con transacciones MS DTC (Coordinador de transacciones distribuidas de Microsoft) distintas de SQL Server Database Engine (Motor de base de datos de SQL Server). También pueden utilizar las funciones de la API para obtener más control sobre los límites de una transacción distribuida que incluya varios equipos que ejecuten sesiones de Database Engine (Motor de base de datos).

Transacciones distribuidas de ODBC

Puede controlar las transacciones locales en la API de ODBC si establece el atributo de conexión SQL_ATTR_AUTOCOMMIT como SQL_AUTOCOMMIT_OFF y, a continuación, llama a la función SQLEndTran de ODBC para confirmar o revertir cada transacción. No utilice estas funciones para administrar una transacción distribuida en una aplicación de ODBC. Utilice los métodos COM de MS DTC en su lugar:

  • Llame a DtcGetTransactionManager para conectarse a MS DTC.

  • Llame a ITransactionDispenser::BeginTransaction para iniciar la transacción distribuida y obtener un objeto de transacción.

  • Para cada conexión de ODBC que participe en la transacción distribuida, llame a la función de ODBC SQLSetConnectAttr con el parámetro fOption establecido en SQL_COPT_SS_ENLIST_IN_DTC y el parámetro vParam establecido con la dirección del objeto de transacción de ITransactionDispenser::BeginTransaction.

  • Cuando concluye la transacción, en lugar de llamar a la función SQLEndTran de ODBC, llame a los métodos ITransaction::Commit o ITransaction::Rollback del objeto de transacción que se obtiene de ITransactionDispenser::BeginTransaction.

Transacciones distribuidas de OLE DB

El modelo para controlar una transacción distribuida en OLE DB es similar al que se utiliza para controlar una transacción local. Para controlar una transacción local, un consumidor de OLE DB:

  • Utiliza el método ITransactionLocal::StartTransaction para iniciar la transacción local y obtener un objeto de transacción.

  • Llama a los métodos ITransaction::Commit o ITransaction::Rollback del objeto de transacción que obtiene ITransactionLocal::StartTransaction.

Para controlar una transacción distribuida, el consumidor:

  • Llama a DtcGetTransactionManager para conectarse a MS DTC.

  • Llama a ITransactionDispenser::BeginTransaction para iniciar la transacción distribuida y obtener un objeto de transacción.

  • Llama a la interfaz ITransactionJoin del objeto de transacción distribuida de cada conexión que participa en la transacción distribuida.

  • Llama a los métodos ITransaction::Commit o ITransaction::Rollback del objeto de transacción distribuida para concluir la transacción.