Compartir a través de


Procesamiento de transacciones

Una transacción delimita el principio y el final de una serie de operaciones de acceso a datos ejecutadas a través de una conexión. Sujeto a las funcionalidades transaccionales del origen de datos, el objeto Connection también le permite crear y administrar transacciones. Por ejemplo, con el proveedor OLE DB de Microsoft para SQL Server para tener acceso a una base de datos en Microsoft SQL Server, puede crear varias transacciones anidadas para los comandos que ejecute.

ADO garantiza que los cambios en un origen de datos resultantes de las operaciones de una transacción se produzcan correctamente juntos o que no se produzcan en absoluto.

Si cancela la transacción o si se produce un error en una de sus operaciones, el resultado será como si no se produjera ninguna de las operaciones de la transacción. El origen de datos permanecerá como estaba antes de que se iniciara la transacción.

ADO proporciona los métodos siguientes para controlar las transacciones: BeginTrans, CommitTransy RollbackTrans. Use estos métodos con un objeto Connection cuando desee guardar o cancelar una serie de cambios realizados en los datos de origen como una sola unidad. Por ejemplo, para transferir dinero entre cuentas, resta una cantidad de una y agrega la misma cantidad a la otra. Si se produce un error en alguna actualización, las cuentas ya no cuadran. Realizar estos cambios dentro de una transacción abierta garantiza que todos o ninguno de los cambios se realicen.

Nota

No todos los proveedores admiten transacciones. Compruebe que la propiedad definida por el proveedor "transaction DDL" aparece en la colección Connection del objeto Properties, lo que indica que el proveedor admite transacciones. Si el proveedor no admite transacciones, llamar a uno de estos métodos devolverá un error.

Después de llamar al método BeginTrans, el proveedor ya no confirmará instantáneamente los cambios que realice hasta que llame a CommitTrans o RollbackTrans para finalizar la transacción.

Al llamar al método CommitTrans, se guardan los cambios realizados en una transacción abierta en la conexión y finaliza la transacción. Al llamar al método RollbackTrans, se invierten los cambios realizados en una transacción abierta y finaliza la transacción. Llamar a cualquiera de los métodos cuando no hay ninguna transacción abierta genera un error.

Dependiendo de la propiedad Attributes del objeto Connection, llamar al método CommitTrans o RollbackTrans puede iniciar automáticamente una nueva transacción. Si la propiedad Attributes está establecida en adXactCommitRetaining, el proveedor inicia automáticamente una nueva transacción después de una llamada CommitTrans. Si la propiedad Attributes se establece en adXactAbortRetaining, el proveedor inicia automáticamente una nueva transacción tras una llamada a RollbackTrans.

Nivel de aislamiento de transacción

Use la propiedad IsolationLevel de para establecer el nivel de aislamiento de una transacción en un objeto connection . La configuración no surte efecto hasta la próxima vez que llame al método BeginTrans. Si el nivel de aislamiento que solicita no está disponible, el proveedor puede devolver el siguiente nivel mayor de aislamiento. Consulte la propiedad IsolationLevel en la referencia del programador de ADO para obtener más información sobre los valores válidos.

Transacciones anidadas

Para los proveedores que admiten transacciones anidadas, llamar al método BeginTrans dentro de una transacción abierta inicia una nueva transacción anidada. El valor devuelto indica el nivel de anidamiento: un valor devuelto de "1" indica que ha abierto una transacción de nivel superior (es decir, la transacción no está anidada dentro de otra transacción), "2" indica que ha abierto una transacción de segundo nivel (una transacción anidada dentro de una transacción de nivel superior), etc. Llamar a CommitTrans o RollbackTrans afecta solo a la transacción abierta más recientemente; Debe cerrar o revertir la transacción actual para poder resolver las transacciones de nivel superior.