Compatibilidad con transacciones
El grado de compatibilidad con las transacciones está definido por el controlador. ODBC está diseñado para implementarse en una base de datos de usuario único o de escritorio que no tiene necesidad de administrar varias actualizaciones de sus datos. Además, algunas bases de datos que admiten transacciones lo hacen solo para las instrucciones del lenguaje de manipulación de datos (DML) de SQL; hay restricciones o semántica de transacciones especiales con respecto al uso del lenguaje de definición de datos (DDL) cuando una transacción está activa. Es decir, puede haber compatibilidad con transacciones para varias actualizaciones simultáneas de tablas, pero no para cambiar el número y la definición de tablas durante una transacción.
Una aplicación determina si se admiten transacciones, si DDL se puede incluir en una transacción y los efectos especiales de incluir DDL en una transacción mediante una llamada a SQLGetInfo con la opción SQL_TXN_CAPABLE. Para obtener más información, consulte la descripción de la función SQLGetInfo.
Si el controlador no admite transacciones, pero la aplicación tiene la capacidad de (usar una API distinta de ODBC) para bloquear y desbloquear datos, las aplicaciones pueden lograr la compatibilidad con transacciones bloqueando y desbloqueando registros y tablas según sea necesario. Para implementar el ejemplo de transferencia de cuenta, la aplicación bloquearía los registros de ambas cuentas, copie los valores actuales, cargue la primera cuenta, acredite la segunda cuenta y desbloquee los registros. Si se produjo un error en los pasos, la aplicación restablecería las cuentas con las copias.
Incluso los orígenes de datos que admiten transacciones podrían no ser capaces de admitir más de una transacción a la vez dentro de un entorno determinado. Las aplicaciones llaman a SQLGetInfo con la opción SQL_MULTIPLE_ACTIVE_TXN para determinar si un origen de datos puede admitir transacciones activas simultáneas en más de una conexión en el mismo entorno. Dado que hay una transacción por conexión, esto solo es interesante para las aplicaciones que tienen varias conexiones al mismo origen de datos.