Compartilhar via


Confirmando e revertendo transações

Para confirmar ou reverter uma transação no modo de confirmação manual, um aplicativo chama SQLEndTran. Drivers para DBMSs que dão suporte a transações normalmente implementam essa função executando uma instrução COMMIT ou ROLLBACK . O Gerenciador de Driver não chama SQLEndTran quando a conexão está no modo de confirmação automática; ele simplesmente retorna SQL_SUCCESS, mesmo que o aplicativo tente reverter a transação. Como os drivers para DBMSs que não dão suporte a transações estão sempre no modo de confirmação automática, eles podem implementar o SQLEndTran para retornar SQL_SUCCESS sem fazer nada ou não implementá-lo.

Observação

Os aplicativos não devem confirmar ou reverter transações executando instruções COMMIT ou ROLLBACK com SQLExecute ou SQLExecDirect. Os efeitos de fazer isso são indefinidos. Os possíveis problemas incluem o driver não saber mais quando uma transação está ativa e essas instruções falham em fontes de dados que não dão suporte a transações. Em vez disso, esses aplicativos devem chamar SQLEndTran .

Se um aplicativo passar o identificador de ambiente para SQLEndTran, mas não passar um identificador de conexão, o Gerenciador de Driver conceitualmente chamará SQLEndTran com o identificador de ambiente para cada driver que tenha uma ou mais conexões ativas no ambiente. Em seguida, o driver confirma as transações em cada conexão no ambiente. No entanto, é importante perceber que nem o driver nem o Gerenciador de Driver executam uma confirmação em duas fases nas conexões no ambiente; isso é apenas uma conveniência de programação para chamar simultaneamente SQLEndTran para todas as conexões no ambiente.

(Uma confirmação em duas fases geralmente é usada para confirmar transações que são distribuídas entre várias fontes de dados. Em sua primeira fase, as fontes de dados são sondadas sobre se elas podem confirmar sua parte da transação. Na segunda fase, a transação é realmente confirmada em todas as fontes de dados. Se as fontes de dados responderem na primeira fase que não podem confirmar a transação, a segunda fase não ocorrerá.)