Compartir por


Admitir transacciones en OLE DB

Una transacción es una manera de agrupar, o juntar por lotes, una serie de actualizaciones de un origen de datos de manera que, o bien todas se completan correctamente y se confirman a la vez, o bien (si alguna de ellas da error) no se confirma ninguna y se revierte toda la transacción. Este proceso garantiza la integridad del resultado en el origen de datos.

OLE DB admite transacciones con los tres métodos siguientes:

Relación de sesiones y transacciones

Un único objeto de origen de datos puede crear uno o varios objetos de sesión, cada uno de los cuales puede estar dentro o fuera del ámbito de una transacción en un momento dado.

Cuando una sesión no escribe una transacción, todo el trabajo realizado dentro de esa sesión en el almacén de datos se confirma inmediatamente en cada llamada al método. (Esto se conoce a veces como modo de confirmación automática o modo implícito).

Cuando una sesión entra en una transacción, todo el trabajo realizado dentro de esa sesión en el almacén de datos forma parte de esa transacción y se confirma o anula como una sola unidad. (Esto se conoce a veces como modo de confirmación manual).

La compatibilidad con transacciones es específica del proveedor. Si el proveedor que usa admite transacciones, un objeto de sesión que admite ITransaction y ITransactionLocal puede escribir una transacción (no anidada). La clase de plantillas OLE DB CSession admite estas interfaces y es la manera recomendada de implementar la compatibilidad con transacciones en Visual C++.

Inicio y finalización de la transacción

Se llama a los métodos StartTransaction, Commit y Abort del objeto del conjunto de filas en el consumidor.

La llamada a ITransactionLocal::StartTransaction inicia una nueva transacción local. Al iniciar la transacción, los cambios que las operaciones posteriores exigen no se aplican al almacén de datos hasta que se confirma la transacción.

La llamada a ITransaction::Commit o ITransaction::Abort finaliza la transacción. Commit hace que todos los cambios dentro del ámbito de la transacción se apliquen al almacén de datos. Abort hace que todos los cambios dentro del ámbito de la transacción se cancelen y el almacén de datos se deja en el estado que tenía antes de que se iniciara la transacción.

Transacciones anidadas

Una transacción anidada se produce cuando se inicia una nueva transacción local cuando ya existe una transacción activa en la sesión. La nueva transacción se inicia como una transacción anidada debajo de la transacción actual. Si el proveedor no admite transacciones anidadas, la llamada a StartTransaction cuando ya hay una transacción activa en la sesión devuelve XACT_E_XTIONEXISTS.

Transacciones distribuidas

Una transacción distribuida es una transacción que actualiza datos distribuidos, es decir, datos en más de un sistema de equipos en red. Si desea admitir transacciones en un sistema distribuido, debe utilizar .NET Framework en vez de la compatibilidad con transacciones de OLE DB.

Consulte también

Usar descriptores de acceso