Partilhar via


Como confirmar e reverter transações

Para confirmar ou reverter uma transação no modo de confirmação manual, um aplicativo chama SQLEndTran. Os drivers para DBMSs que oferecem 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 oferecem suporte a transações estão sempre no modo de confirmação automática, eles podem implementar 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. Possíveis problemas incluem o driver não saber mais quando uma transação está ativa e essas instruções falhando em fontes de dados que não oferecem suporte a transações. Esses aplicativos devem chamar SQLEndTran em vez disso.

Se um aplicativo passa o identificador de ambiente para SQLEndTran, mas não passa um identificador de conexão, o Gerenciador de Driver chama conceitualmente SQLEndTran com o identificador de ambiente para cada driver que tem 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 realizam uma confirmação bifásica 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 de duas fases geralmente é usada para confirmar transações que estão espalhadas por várias fontes de dados. Em sua primeira fase, as fontes de dados são sondadas para saber se podem comprometer sua parte da transação. Na segunda fase, a transação é realmente confirmada em todas as fontes de dados. Se alguma fonte de dados responder na primeira fase que não pode confirmar a transação, a segunda fase não ocorre.)