Transação (ODBC)
Este tópico se aplica às classes MFC ODBC.
Uma transação é uma maneira de agrupar ou lote, uma série de atualizações para um a fonte de dados para que todos são confirmados ao mesmo tempo, ou nenhum são confirmadas, se você reverter a transação. Se você não usar uma transação, as alterações na fonte de dados são confirmadas automaticamente em vez de serem submetidos sob demanda.
Observação |
---|
Nem todos os drivers de banco de dados ODBC suportam a transações. Chamar o CanTransact a função de membro de sua incorporadas ou CRecordset o objeto para determinar se o driver oferece suporte a transações para um determinado banco de dados. Observe que CanTransact não informa se a fonte de dados oferece suporte a transação inteira. Você também deve chamar CDatabase::GetCursorCommitBehavior e CDatabase::GetCursorRollbackBehavior depois de CommitTrans e reversão para verificar o efeito da transação em abrir CRecordset objeto. |
Chama o AddNew e Editar funções de membro de um CRecordset objeto afetam a fonte de dados imediatamente quando você chamar atualização. Excluir chamadas também entrarão em vigor imediatamente. Por outro lado, você pode usar uma transação que consiste em várias chamadas para AddNew, Editar, atualização, e Excluir, que são executadas, mas não confirmadas até que você chame CommitTrans explicitamente. Estabelecendo uma transação, você pode executar uma série de tais chamadas mantendo a capacidade de revertê-los. Se um recurso crítico estiver disponível, ou alguma outra condição impede que a transação inteira seja concluída, você pode reverter a transação em vez de confirmá-lo. Nesse caso, nenhuma das alterações que pertencem à transação afetam a fonte de dados.
Observação |
---|
Atualmente, a classe CRecordset não oferece suporte a atualizações para a fonte de dados se você implementou a busca de linha em massa. Isso significa que você não pode fazer chamadas para AddNew, Editar, Excluir, ou atualização. No entanto, você pode escrever funções próprias para executar atualizações e chame essas funções dentro de uma determinada transação. Para obter mais informações sobre a busca de linha em massa, consulte Recordset: Buscar registros em massa (ODBC). |
Observação |
---|
Além de afetar seu conjunto de registros, transações afetam as declarações de SQL executar diretamente, desde que você usar o ODBC HDBC associados com o CDatabase objeto ou ODBC HSTMT com base no que 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 foi concluída pela metade, tais como pode acontecer se uma exceção foi lançada antes que a última atualização foi feita. O agrupamento de tais atualizações em uma transação permite uma recuperação (rollback) das alterações e retorna os registros para o estado de pretransaction. Por exemplo, se um banco transfere dinheiro da conta a conta B, tanto a retirada do depósito de um e a para b deve ter êxito para processar os fundos corretamente ou toda a transação deve falhar.
As classes de banco de dados, você realizar transações através de CDatabase objetos. A CDatabase objeto representa uma conexão a uma fonte de dados e um ou mais conjuntos de registros associados que CDatabase objeto operam nas 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 nem uma transação ocupar vários objetos de banco de dados. |
Os tópicos a seguir fornecem mais informações sobre como as transações são realizadas: