Compartilhar via


Processamento de transações

Uma transação delimita o início e o fim de uma série de operações de acesso a dados executadas em uma conexão. Sujeito às funcionalidades transacionais da fonte de dados, o objeto Connection também permite que você crie e gerencie transações. Por exemplo, usando o Provedor Microsoft OLE DB para SQL Server para acessar um banco de dados no Microsoft SQL Server, você pode criar várias transações aninhadas para os comandos executados.

O ADO garante que as alterações em uma fonte de dados resultantes de operações em uma transação ocorram juntas com sucesso ou não.

Se você cancelar a transação ou se uma das operações falhar, o resultado será como se nenhuma das operações na transação tivesse ocorrido. A fonte de dados permanecerá como era antes do início da transação.

O ADO fornece os seguintes métodos para controlar as transações: BeginTrans, CommitTrans e RollbackTrans. Use esses métodos com um objeto Connection quando quiser salvar ou cancelar uma série de alterações feitas nos dados de origem como uma só unidade. Por exemplo, para transferir dinheiro entre contas, você subtrai um valor de uma e adiciona o mesmo valor à outra. Se uma das atualizações falhar, as contas deixarão de exibir o saldo. Fazer essas alterações em uma transação aberta garante que todas ou nenhuma das alterações sejam feitas.

Observação

Nem todos os provedores dão suporte a transações. Verifique se a propriedade definida pelo provedor "Transaction DDL" é exibida na coleção Properties do objeto Connection, indicando que o provedor dá suporte a transações. Se o provedor não der suporte a transações, a chamada a um desses métodos retornará um erro.

Após a chamada ao método BeginTrans, o provedor não confirmará mais instantaneamente as alterações feitas até que você chame CommitTrans ou RollbackTrans para encerrar a transação.

A chamada ao método CommitTrans salva as alterações feitas em uma transação aberta na conexão e encerra a transação. A chamada ao método RollbackTrans reverte todas as alterações feitas em uma transação aberta e encerra a transação. A chamada de qualquer método quando não há nenhuma transação aberta gera um erro.

Dependendo da propriedade Attributes do objeto Connection, a chamada ao método CommitTrans ou RollbackTrans pode iniciar automaticamente uma nova transação. Se a propriedade Attributes estiver definida como adXactCommitRetaining, o provedor iniciará automaticamente uma nova transação após uma chamada a CommitTrans. Se a propriedade Attributes estiver definida como adXactAbortRetaining, o provedor iniciará automaticamente uma nova transação após uma chamada a RollbackTrans.

Nível de Isolamento de Transação

Use a propriedade IsolationLevel para definir o nível de isolamento de uma transação em um objeto Connection. A configuração só entra em vigor na próxima vez que você chama o método BeginTrans. Se o nível de isolamento solicitado não estiver disponível, o provedor poderá retornar o próximo nível maior de isolamento. Veja a propriedade IsolationLevel na Referência do Programador do ADO para obter mais detalhes sobre os valores válidos.

Transações aninhadas

Para os provedores que dão suporte a transações aninhadas, a chamada ao método BeginTrans em uma transação aberta inicia uma nova transação aninhada. O valor retornado indica o nível de aninhamento: um valor retornado igual a "1" indica que você abriu uma transação de nível superior (ou seja, a transação não está aninhada dentro de outra transação) e "2" indica que você abriu uma transação de segundo nível (uma transação aninhada dentro de uma transação de nível superior) etc. Uma chamada a CommitTrans ou a RollbackTrans afeta apenas a transação aberta mais recentemente. Você precisa fechar ou reverter a transação atual para resolver qualquer transação de nível superior.