Partilhar via


Transação (ODBC)

Este tópico se aplica às classes ODBC do MFC.

Uma transação é uma forma de agrupar uma série de atualizações em uma fonte de dados para que todas sejam confirmadas de uma só vez ou nenhuma seja confirmada caso a transação seja revertida. Se você não usar uma transação, as alterações na fonte de dados serão confirmadas automaticamente em vez de serem confirmadas sob demanda.

Observação

Nem todos os drivers de banco de dados ODBC suportam transações. Chame a CanTransact função de membro do seu objeto CDatabase ou CRecordset para determinar se o driver suporta transações para um determinado banco de dados. Observe que CanTransact não informa se a fonte de dados fornece suporte total a transações. Você também deve chamar CDatabase::GetCursorCommitBehavior e CDatabase::GetCursorRollbackBehavior depois de CommitTrans e Rollback para verificar o efeito da transação no objeto aberto CRecordset.

As chamadas para as funções AddNew e membro Edit de um objeto CRecordset afetam a fonte de dados imediatamente quando se chama Update. Delete As chamadas também entram em vigor imediatamente. Por outro lado, você pode usar uma transação que consiste em várias chamadas para AddNew, Edit, Update, e Delete, que são executadas, mas não confirmadas, até que você chame CommitTrans explicitamente. Ao estabelecer uma transação, você pode executar uma série dessas chamadas, mantendo a capacidade de revertê-las. Se um recurso crítico não estiver disponível ou alguma outra condição impedir que toda a transação seja concluída, você poderá reverter a transação em vez de confirmá-la. Nesse caso, nenhuma das alterações pertencentes à transação afeta a fonte de dados.

Observação

Atualmente, a classe CRecordset não oferece suporte a atualizações para a fonte de dados se você tiver implementado a busca de linha em massa. Isso significa que você não pode fazer chamadas para AddNew, Edit, Delete, ou Update. No entanto, você pode escrever suas próprias funções para executar atualizações e, em seguida, chamar essas funções dentro de uma determinada transação. Para obter mais informações sobre a busca de linhas em massa, consulte Recordset: Buscando registros em massa (ODBC).

Observação

Além de afetar seu conjunto de registros, as transações afetam as instruções SQL que você executa diretamente, desde que use o ODBC HDBC associado ao seu CDatabase objeto ou um ODBC HSTMT baseado nesse HDBC.

As transações são particularmente úteis quando você tem vários registros que devem ser atualizados simultaneamente. Nesse caso, você deseja evitar uma transação semiconcluída, como pode acontecer se uma exceção foi lançada antes da última atualização ser feita. O agrupamento dessas atualizações em uma transação permite uma recuperação (reversão) das alterações e retorna os registros ao estado de pré-transação. Por exemplo, se um banco transferir dinheiro da conta A para a conta B, tanto o levantamento de A como o depósito para B têm de ter êxito para processar os fundos corretamente ou toda a transação deve falhar.

Nas classes de banco de dados, você executa transações por meio de CDatabase objetos. Um CDatabase objeto representa uma conexão com uma fonte de dados e um ou mais conjuntos de registros associados a esse CDatabase objeto operam em tabelas do banco de dados por meio de funções de membro do conjunto de registros.

Observação

Apenas um nível de transações é suportado. Não é possível aninhar transações ou uma transação envolver vários objetos de base de dados.

Os tópicos a seguir fornecem mais informações sobre como as transações são realizadas:

Ver também

Open Database Connectivity (ODBC)