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
4DbProviderFactory provider;
5provider = DbProviderFactories.GetFactory("System.Data.SqlClient");
6DbConnection conn = provider.CreateConnection();
7conn.ConnectionString = strConn;
8
9// Primeira query. Sendo executada com sucesso
10DbCommand dbcmd = conn.CreateCommand();
11dbcmd.Connection = conn;
12dbcmd.CommandText = "DELETE Lojas";
13dbcmd.CommandType = CommandType.Text;
14
15// Segunda query. Irá ocorrer um erro.
16DbCommand dbcmd2 = conn.CreateCommand();
17dbcmd2.Connection = conn;
18dbcmd2.CommandText = "DELETE Invalida";
19dbcmd2.CommandType = CommandType.Text;
20
21conn.Open();
22
23try {
24// Agora vamos deletar o conteudo da tabela Lojas da primeira query.
25dbcmd.ExecuteNonQuery();
26
27// A segunda query irá tentar deletar o conteúdo de uma tabela não
28existente , ocorrendo erro o ts.complete não irá ser executado.
29dbcmd2.ExecuteNonQuery();
30//se todas as operações forem um sucesso então irá ocorrer o commit ,
31//na transação.
32
33ts.Complete();
34
35} catch (DbException ex) {
36
37// Tratamento de erro
38
39} finally {
40
41
42conn.Close();
43ts.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 .