Dando suporte a transações em banco de dados OLE
Uma transação é uma maneira de agrupar, ou colocar em lotes, uma série de atualizações para uma fonte de dados para que todas tenham êxito e sejam confirmadas de uma só vez ou (se alguma delas falhar) nenhuma delas seja confirmada e toda a transação seja revertida. Esse processo garante a integridade do resultado na fonte de dados.
O OLE DB dá suporte a transações com os seguintes três métodos:
Relação de sessões e transações
Um objeto de fonte de dados pode criar um ou mais objetos de sessão, cada um deles pode estar dentro ou fora do escopo de uma transação em um determinado momento.
Quando uma sessão não entra em uma transação, todo o trabalho feito dentro dessa sessão no armazenamento de dados é imediatamente confirmado em cada chamada de método. (Isso às vezes é chamado de modo de confirmação automática ou modo implícito.)
Quando uma sessão entra em uma transação, todo o trabalho feito dentro dessa sessão no armazenamento de dados faz parte dessa transação e é confirmado ou anulado como uma unidade. (Às vezes, isso é chamado de modo de confirmação manual.)
O suporte à transação é específico a cada provedor. Se o provedor que você está usando dá suporte a transações, um objeto de sessão que dá suporte a ITransaction
e ITransactionLocal
pode entrar em uma transação (não aninhada). A classe de Modelos OLE DB CSession dá suporte a essas interfaces e é a maneira recomendada de implementar o suporte a transações no Visual C++.
Início e término da transação
Você chama os métodos StartTransaction
, Commit
e Abort
no objeto rowset no consumidor.
A chamada ITransactionLocal::StartTransaction
inicia uma nova transação local. Quando você inicia a transação, todas as alterações exigidas por operações posteriores não são aplicadas ao armazenamento de dados até você confirmar a transação.
Chamar ITransaction::Commit
ou ITransaction::Abort
encerra a transação. Commit
faz com que todas as alterações no escopo da transação sejam aplicadas ao armazenamento de dados. Abort
faz com que todas as alterações no escopo da transação sejam canceladas e o armazenamento de dados seja deixado no estado em que estava antes do início da transação.
Transações aninhadas
Uma transação aninhada ocorre quando você inicia uma nova transação local quando já existe uma transação ativa na sessão. A nova transação é iniciada como uma transação aninhada sob a transação atual. Se o provedor não der suporte a transações aninhadas, chamar StartTransaction
quando já existir uma transação ativa na sessão retornará XACT_E_XTIONEXISTS.
Transações distribuídas
Uma transação distribuída é uma transação que atualiza dados distribuídos, ou seja, os dados em mais de um sistema de computador em rede. Para suportar transações em um sistema distribuído, você deve usar o .NET Framework, em vez de suporte para transações OLE DB.