Suporte a transações
O grau de suporte para transações é definido pelo driver. O ODBC foi feito para ser implementado em um banco de dados de usuário único ou de área de trabalho que não precisa gerenciar várias atualizações de seus dados. Além disso, alguns bancos de dados que dão suporte para transações aceitam apenas as instruções DML (linguagem de manipulação de dados) do SQL; há restrições ou semântica de transação especial em relação ao uso de DDL (linguagem de definição de dados) quando uma transação está ativa. Ou seja, pode haver suporte para transações para várias atualizações simultâneas de tabelas, mas não para alterar o número e a definição de tabelas durante uma transação.
Um aplicativo determina se há suporte para as transações, se o DDL pode ser incluído em uma transação e qualquer efeito especial da inclusão de DDL em uma transação chamando SQLGetInfo com a opção SQL_TXN_CAPABLE. Confira a descrição de cada função SQLGetInfo para obter mais informações.
Se o driver não der suporte para transações, mas o aplicativo tiver a capacidade (usando uma API diferente de ODBC) de bloquear e desbloquear dados, os aplicativos poderão obter suporte a transações bloqueando e desbloqueando registros e tabelas conforme necessário. Para implementar o exemplo de transferência de conta, o aplicativo bloquearia os registros das duas contas, copiaria os valores atuais, debitaria a primeira conta, creditaria a segunda conta e desbloquearia os registros. No caso de falha de alguma etapa, o aplicativo redefiniria as contas usando as cópias.
Mesmo as fontes de dados que dão suporte para transações podem não conseguir dar suporte a mais de uma transação por vez em um ambiente específico. Os aplicativos chamam SQLGetInfo com a opção SQL_MULTIPLE_ACTIVE_TXN para determinar se uma fonte de dados pode dar suporte para transações ativas simultâneas em mais de uma conexão no mesmo ambiente. Como existe uma transação por conexão, isso só é interessante para aplicativos que têm várias conexões com a mesma fonte de dados.