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 .