Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de UsuĆ”rios
»CĆ©lulas AcadĆŖmicas«
intcontpiada : 118
Flanelinha
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
FaƧa um pequeno teste com 10 questƵes de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programaĆ§Ć£o com nosso treinamento on-line de lĆ³gica de programaĆ§Ć£o
.:.
Veja nosso calendƔrio de treinamentos
Gostou da PƔgina?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 






Como criar transações de banco com ASP

É muito comum precisarmos que duas atualizações de banco sejam sempre completadas em conjunto. Por exemplo, você vai precisar registrar a venda e ao mesmo tempo fazer uma redução do estoque. Se a redução do estoque falhar, o registro da venda também precisa ser cancelado.

Para garantir que as duas ações sempre sejam feitas em conjunto utilizamos uma transação, velha conhecida dos que já trabalham com bancos de dados. Uma transação garante que tudo será completado ou abortado, nunca pela metade.

Mas como realizar uma transação em páginas .ASP ? Muitos pensarão que bastaenviar as instruções de controle transacional para o banco, mas não é bem assim.

Para os que trabalham com componentes e MTS ou COM+ basta dizer que uma aplicação ASP roda dentro de um pacote MTS/COM+ : Se observar o MTS, identificará pacotes para aplicações IN-Process e Out-Of-Process do IIS. Nestes pacotes roda a aplicação ASP, de acordo com a configuração da opção "Run in separate memory space" do IIS.

Programadores ASP, porém, não precisarão se aprofundar tanto nos detalhes do MTS para realizar o controle transacional. Tal controle é razoavelmente simples, com apenas uma má notícia para os programadores ASP : O controle transacional é feito através de um sistema de transações distribuidas e, portanto, não funciona com Access, apenas com bancos client/server como o SQL Server ou Oracle.

Vejamos então o seguinte código :

<html>
<body>
<% dim cn
set cn=createobject("adodb.connection")
cn.open "Provider=SQLOLEDB.1;Persist Security Info=False;
UserID=sa;InitialCatalog=Northwind;Data Source=srv_2000"
cn.execute "update products set unitprice=unitprice * 2"
cn.execute "update xxx set bairro='rio'"
cn.close

set cn=nothing
%>
</body>
</html>


A 2a instrução causará um erro, pois não existe tabela xxx. Porém o erro só será identificado após a execução da primeira, depois que os preços tiverem sido atualizados.

A 1a coisa que pensamos é inserir um tratamento de erros. Veja :


<html>
<body>
<% dim cn
on error resume next
set cn=createobject("adodb.connection")
cn.open "Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=sa;Initial Catalog=Northwind;Data Source=srv_2000"
cn.execute "update products set unitprice=unitprice * 2"
if err.number<>0 then
response.write("erro")
response.end
end if
cn.execute "update xxx set bairro='rio'"
if err.number<>0 then
response.write("erro")
response.end
end if
cn.close

set cn=nothing
%>
</body>
</html>

Com o tratamento de erro as mensagens de erro serão mais amigáveis, mais o problema persistirá : Os preços serão atualizados antes que o erro da 2a instrução seja identificados.

Para garantir o controle transacional na página 2 coisas precisarão ser feitas :

1) Precisaremos ativar o controle transacional no inicio da página 2) Precisaremos completar ou abortar a transação conforme a ocorrencia ou não de erros.


Para ativar o controle transacional deveremos utilizar uma variável chamada @TRANSACTION. Basta setar o valor da variável para Required que a página já estará trabalhando com uma transação.

Por fim, para gravar ou abortar a transação deveremos utilizar um objeto do ASP chamado ObjectContext. O ObjectContext possui métodos chamados SetAbort e SetComplete que, respectivamente, abortam ou completam a transação.

Veja como fica o código completo :

<% @transaction="REQUIRED" %>
<% response.buffer=false %>
<html>
<body>
<% dim cn
on error resume next
set cn=createobject("adodb.connection")
cn.open "Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=sa;Initial Catalog=Northwind;Data Source=srv_2000"
cn.execute "update products set unitprice=unitprice * 2"
if err.number<>0 then
objectcontext.setabort
response.write("erro")
response.end
end if
cn.execute "update xxx set bairro='rio'"
if err.number<>0 then
objectcontext.setabort
response.write("erro")
response.end
end if

objectcontext.setcomplete

cn.close

set cn=nothing
%>
</body>
</html>

Teste o código novamente. Verá que os preços não serão mais atualizados, apesar do erro só ocorrer após a atualização. Quando o erro ocorre, toda a transação é abortada (setabort).

 

Dennes Torres
MCSD,MCSE,MCDBA





Envie seus comentįrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentįrios nesta pįgina

Veja abaixo os comentários já enviados :

Nome : E-Mail :
sdfsdfsd
Nome : aurl E-Mail : aurl@terra.com.br
Boa tarde,

fiz o exemplo acima em um db em access na minha máquina, mas não deu certo e o código está correto! Poderia ser o BD, será que funciona só em SQL-SERVER....??


Grato
Aurl
Nome : aurl E-Mail :
foi mal o comentário,

desculpem-me.
Nome : df E-Mail : sdf
dsfsdf
Nome : Marcos E-Mail : marcos-95@bol.com.br
Dennes, dá pra fazer este controle usando páginas diferentes dentro de uma unica transação ?

Sds,

Marcos
Nome : Otavio E-Mail : otaviolcarvalho@hotmail.com
Como eu faço para fazer uma transação usando classes...
Nome : Otavio E-Mail : otaviolcarvalho@hotmail.com
Como eu faço para fazer uma transação usando classes...
Nome : Fabio Eduardo E-Mail : fabimspank6@hotmai.com
Bom artigo.

abs
Nome : mario E-Mail : mario8887@gmail.com
F0HhYa h1! nice site! oxyutelno
Nome : mario E-Mail : mario8887@gmail.com
F0HhYa h1! nice site! oxyutelno
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
-1'
Nome : -1' E-Mail : 1
1
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

ļæ½ BĆŗfalo InformĆ”tica, Treinamento e Consultoria - Rua Ɓlvaro Alvim, 37 Sala 920 - CinelĆ¢ndia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br