Na programação, as transações são frequentemente usadas. A chamada transação é uma série de operações que devem ser bem-sucedidas. Enquanto uma operação falhar, todas as outras etapas também deverão ser desfeitas. Por exemplo, usando ASP para desenvolver um sistema de disco rígido de rede, a parte de registro do usuário precisa fazer o seguinte:
registrar as informações do usuário no banco de dados, abrir uma pasta para o usuário armazenar o log de operação do usuário de inicialização,
essas três etapas devem usar transações, caso contrário, no caso de operação de disco, a falha sem desfazer a operação do banco de dados resultará em um fenômeno de "usuário morto" que só pode efetuar login, mas não pode operar.
Devido ao histórico especial de desenvolvimento de sistemas de banco de dados, tudo, desde o Access até o DB2, tem suporte a transações. Portanto, as etapas acima podem ser expressas da seguinte forma:
Em caso de erro, retomar a próxima
etapa 1:
registrar as informações do usuário no banco de dados em um ambiente de transação
If Err Then
Feche a conexão e saiaElse
Etapa 2: crie a pasta If Err Then
Reverta a primeira operação do banco de dados e saia do Else
Etapa 3: operar o banco de dados de log em um ambiente de transaçãoIf Err Then
Reverta a primeira etapa, exclua a pasta criada na segunda etapa e saia End If
Terminar se
Terminar se
Envie a transação da primeira operação de banco de dados. Envie a transação da segunda operação de banco de dados.
O fim
precisa ser julgado em cada etapa. Se falhar, será necessário reverter manualmente as etapas anteriores, tornando o programa complicado e difícil de entender. Se o programa for atualizado no futuro e outras etapas forem adicionadas, mais camadas de If...Else...End If precisarão ser aninhadas, tornando o fluxo do programa mais complicado.
A solução correta é usar a função de controle de transações do ASP. Ao entrar em contato com o serviço MTS, o IIS pode controlar uma variedade de sistemas que suportam transações. Quando o programa envia um sinal de "falha", todos os sistemas que suportam transações serão revertidos automaticamente, mesmo que a operação tenha sido oficialmente concluída; as transações de suporte também serão revertidas. Fornece um método conveniente de reversão manual. O exemplo acima foi reescrito usando a função de controle de transação ASP da seguinte forma:
<%@ TRANSACTION = Required %>
Em caso de erro, retomar o próximo
conjunto Conn=Server.CreateObject("ADODB.Connection")
Conexão aberta....
Conn.Execute "INSERT...."
Conexão Fechar
Definir Conn=Nada
Definir Conn2=Server.CreateObject("ADODB.Connection")
Conn2.Abrir....
Conn2.Execute "INSERIR...."
Conexão2.Fechar
Definir Conn2=Nada
Definir FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
Se errar então
ObjectContext.SetAbort 'Notifica todos os componentes que suportam transações para reverter e executar código de reversão manual
Outro
ObjectContext.SetComplete
Terminar se
Definir FSO = Nada
Sub OnTransactionAbort
Resposta.Escreva "Erro"
FSO.DeleteFile Server.Mappath("a.txt") 'Reversão manual do FSO - excluir pasta
Finalizar sub
SubOnTransactionCommit
Response.Write "Conclua a tarefa com sucesso"
Finalizar sub
%>
O <%@ TRANSACTION = Required %> na primeira linha indica que o arquivo ASP desta página requer suporte a transações MTS. Todas as operações intermediárias são escritas em ordem normal, sem considerar problemas de reversão. Determine se há erros no final do programa. Nesse caso, chame o método SetAbort do ObjectContext. O IIS notificará todos os componentes que suportam transações por meio do serviço MTS para reverter (principalmente bancos de dados) e executará Sub OnTransactionAbort para reverter manualmente as operações que não oferecem suporte a transações se nenhum erro ocorrer, chame; o método SetComplete do ObjectContext, Sub OnTransactionCommit será executado para exibir uma mensagem de sucesso.
Todo o programa ASP não precisa escrever código redundante para julgamento de erros e operações de reversão. Ele só precisa ser avaliado no final. Mesmo que operações de várias etapas sejam adicionadas no futuro, ele só precisa ser controlado no Sub OnTransactionAbort. É muito conveniente e os programadores podem se concentrar na escrita processual em vez de escrever código de correção de erros.
Na verdade, o ASP também oferece muitas outras funções úteis, esperando que as utilizemos. Não pense que, como o ASP usa linguagem de script, suas funções devem ser fracas.