Criando facilmente transacões com .Net 2.0
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 .