Compartir a través de


Confirmar y revertir las transacciones

Para confirmar o revertir una transacción en modo de confirmación manual, una aplicación llama a SQLEndTran. Los controladores para DBMS que admiten transacciones suelen implementar esta función mediante la ejecución de una instrucción COMMIT o ROLLBACK. El Administrador de controladores no llama a SQLEndTran cuando la conexión está en modo de confirmación automática; simplemente devuelve SQL_SUCCESS, incluso si la aplicación intenta revertir la transacción. Dado que los controladores de DBMS que no admiten transacciones siempre están en modo de confirmación automática, pueden implementar SQLEndTran para devolver SQL_SUCCESS sin hacer nada o no implementarlo en absoluto.

Nota:

Las aplicaciones no deben confirmar ni revertir transacciones ejecutando instrucciones COMMIT o ROLLBACK con SQLExecute o SQLExecDirect. Los efectos de esta acción son indefinidos. Algunos de los posibles problemas son que el controlador ya no sepa cuándo una transacción está activa o que estas instrucciones produzcan errores en los orígenes de datos que no admiten transacciones. En su lugar, estas aplicaciones deben llamar a SQLEndTran.

Si una aplicación pasa el identificador de entorno a SQLEndTran pero no pasa un identificador de conexión, el Administrador de controladores llama conceptualmente a SQLEndTran con el identificador de entorno para cada controlador que tenga una o varias conexiones activas en el entorno. A continuación, el controlador confirma las transacciones en cada conexión del entorno. Sin embargo, es importante tener en cuenta que ni el controlador ni el Administrador de controladores realizan una confirmación en dos fases en las conexiones del entorno; esto es simplemente una ventaja de programación para llamar simultáneamente a SQLEndTran para todas las conexiones del entorno.

(Por lo general, las confirmaciones en dos fases se usan para confirmar transacciones que se distribuyen entre varios orígenes de datos. En su primera fase, se sondean los orígenes de datos para saber si pueden confirmar su parte de la transacción. En la segunda fase, la transacción se confirma realmente en todos los orígenes de datos. Si en la primera fase los orígenes de datos responden que no pueden confirmar la transacción, no se produce la segunda fase.)