Desenvolvimento - ASP. NET

Criando facilmente transacões com .Net 2.0

Nesse artigo o autor mostra como é fácil utilizarmos transações em aplicações com .Net 2.0.

por Moacir Casemiro



Nesse artigo irei mostrar como é fácil utilizarmos transações em aplicações com .Net 2.0 . Uma das melhorias mais significativas no .NET 2.0 é a área de transações. Agora com uma única linha torna-se extremamente fácil suportar blocos transactional do código usando o conceito de "ambient" transaction com o TransactionScope localizada no namespace System.Transactions.

Abaixo está um exemplo de como utilizar da melhor forma transações em nossas aplicações.

 1 using (TransactionScope ts = new TransactionScope()) {
 2 
 3     // Um "ambient" é colocado no contexto atual
 4     DbProviderFactory provider;
 5     provider = DbProviderFactories.GetFactory("System.Data.SqlClient");
 6     DbConnection conn = provider.CreateConnection();
 7     conn.ConnectionString = strConn;
 8 
 9     // Primeira query. Sendo executada com sucesso
10     DbCommand dbcmd = conn.CreateCommand();
11     dbcmd.Connection = conn;
12     dbcmd.CommandText = "DELETE Lojas";
13     dbcmd.CommandType = CommandType.Text;
14 
15     // Segunda query. Irá ocorrer um erro.
16     DbCommand dbcmd2 = conn.CreateCommand();
17     dbcmd2.Connection = conn;
18     dbcmd2.CommandText = "DELETE Invalida";
19     dbcmd2.CommandType = CommandType.Text;
20 
21     conn.Open();
22 
23     try { 
24         // Agora vamos deletar o conteudo da tabela Lojas da primeira query. 
25         dbcmd.ExecuteNonQuery();
26
27           // A segunda query irá tentar deletar o conteúdo de uma tabela não           
28          existente , ocorrendo erro o ts.complete não irá ser executado.
29         dbcmd2.ExecuteNonQuery();
30         //se todas as operações forem um sucesso então irá ocorrer o commit ,
31         //na transação.
32 
33         ts.Complete(); 
34 
35     } catch (DbException ex) { 
36 
37         // Tratamento de erro 
38 
39     } finally { 
40 
41        
42         conn.Close();
43         ts.Dispose();
44     }
45 }
Extremamente simples, não é? TransactionScope tomará cuidado de quase toda a área transactional neste bloco do código. Tudo que é requerido para cometer a transação deve chamar o método ts.Complete(). Observe que o objeto próprio da conexão está confinado dentro do espaço assim que ele participa automaticamente na transação. Você pode manipular o contexto da transação com Transaction.Current. Esteja ciente que isto não está limitado às operações com o SQL. Você pode criar a transação para dados-armazenamentos no Oracle, SQL Server, messaging de MSMQ e mesmo para operações com filesystem.

Conclusão

No nosso dia - dia sabemos da importância de estarmos sempre preocupados em estar utilizando transações em nossas aplicações de forma que nos garanta um melhor gerenciamento das querys executadas . E na nova versão do .Net veio de forma mais fácil e prática a utilização de transações .

Moacir Casemiro

Moacir Casemiro - Atua como Especialista em tecnologias de Desenvolvimento Microsoft, possui os titulos de MCP, MCAD, MCTS, MCPD Web e Enterprise Application. É consultor e instrutor sobre plataforma .NET. Trabalha com .NET desde sua primeira versão em 2002, participando de vários projetos de médio e grande porte. Possui vasta experiência em ministrar treinamentos e palestra em eventos Microsoft. Mantém o blog http://moacircasemiro.spaces.live.com/.