Compartir a través de


Transacción (ODBC)

Este tema es aplicable a las clases ODBC de MFC.

Una transacción es una forma de agrupar, o juntar por lotes, una serie de actualizaciones de un origen de datos para que todas se confirmen a la vez o no se confirme ninguna si se deshace la transacción. Si no usa una transacción, los cambios realizados en el origen de datos se confirman automáticamente en lugar de confirmarse a petición.

Nota:

No todos los controladores de base de datos ODBC admiten transacciones. Llame a la función miembro CanTransact del objeto CDatabase o CRecordset para determinar si el controlador admite transacciones para una base de datos determinada. Tenga en cuenta que CanTransact no indica si el origen de datos proporciona compatibilidad completa con transacciones. También debe llamar a CDatabase::GetCursorCommitBehavior y CDatabase::GetCursorRollbackBehavior después de CommitTrans y Rollback para comprobar el efecto de la transacción en el objeto abierto CRecordset.

Las llamadas a las funciones miembro AddNew y Edit de un objeto CRecordset afectan al origen de datos inmediatamente cuando se llama a Update. Las llamadas a Delete también surten efecto inmediatamente. En cambio, puede usar una transacción que consta de varias llamadas a AddNew, Edit, Update y Delete, que se realizan pero no se confirman hasta que se llama a CommitTrans explícitamente. Al establecer una transacción, puede ejecutar una serie de llamadas de este tipo mientras conserva la capacidad de revertirlas. Si un recurso crítico no está disponible o alguna otra condición impide que se complete toda la transacción, puede revertir la transacción en lugar de confirmarla. En ese caso, ninguno de los cambios que pertenecen a la transacción afecta al origen de datos.

Nota:

Actualmente, la clase CRecordset no admite actualizaciones en el origen de datos si ha implementado la captura masiva de filas. Esto significa que no se pueden realizar llamadas a AddNew, Edit, Delete o Update. Sin embargo, puede escribir sus propias funciones para realizar actualizaciones y, a continuación, llamar a esas funciones dentro de una transacción determinada. Para más información sobre la obtención masiva de filas, vea Conjunto de registros: obtener registros de forma masiva (ODBC).

Nota:

Además de afectar al conjunto de registros, las transacciones afectan a las instrucciones SQL que se ejecutan directamente siempre que use el HDBC de ODBC asociado con el objeto CDatabase o un HSTMT de ODBC basado en ese HDBC.

Las transacciones son especialmente útiles cuando tiene varios registros que se deben actualizar simultáneamente. En este caso, se quiere evitar una transacción a medio completar, como podría ocurrir si se lanzara una excepción antes de realizar la última actualización. La agrupación de estas actualizaciones en una transacción permite una recuperación (reversión) de los cambios y devuelve los registros al estado de previo a la transacción. Por ejemplo, si un banco transfiere dinero de la cuenta A a la cuenta B, la retirada de A y el depósito en B deben tener completarse correctamente para que los fondos se procesen correctamente; de lo contrario, la transacción producirá un error.

En las clases de base de datos, se realizan transacciones a través de objetos CDatabase. Un objeto CDatabase representa una conexión a un origen de datos, y uno o varios conjuntos de registros asociados a ese objeto CDatabase operan en tablas de la base de datos a través de funciones miembro del conjunto de registros.

Nota:

Solo se admite un nivel de transacciones. No puede anidar transacciones ni puede abarcar varios objetos de base de datos.

En los temas siguientes se proporciona más información sobre cómo se realizan las transacciones:

Consulte también

Conectividad abierta de bases de datos (ODBC)