Transação Aninhada e Roolback de Procedure C#

Fala pessoal, hoje um desenvolvedor teve uma necessidade de chamar uma procedure em um loop varias vezes e realizar o commit ou rollback caso executasse com sucesso todo o laço ou realizar o rollback em caso de alguma falha tudo dentro de uma transação, segue abaixo a rotina que criei para realizar o teste com ele.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
 
namespace Teste_transacao
{
    class Program
    {
        public static void Main(string[] args)
        {
 
            SqlConnection dbConnection = new SqlConnection(@"Data Source=192.168.1.50;Initial Catalog=SISFAC ; User ID=teste;Password=teste");
            dbConnection.Open();
            SqlTransaction trans;
            trans = dbConnection.BeginTransaction();
            SqlCommand comando = new SqlCommand("SP_I_TRANSACAO", dbConnection, trans);
            comando.CommandType = CommandType.StoredProcedure;
            try
            {
                comando.Parameters.Add("@ID", SqlDbType.Int);
 
                for (int i = 0; i < 3; i++)
                {
                    comando.Parameters[0].Value = i;
                    comando.ExecuteNonQuery();
 
                    Console.WriteLine(i);
                    if (i == 2)
                       trans.Rollback();
 
 
                }
 
                trans.Commit();
 
            }
            catch (SqlException e)
            {
                throw new Exception(e.Message);
                trans.Rollback();
            }
            finally
            {
                dbConnection.Close();
            }
 
 
        }
 
    }
 
}
C#

Leave a Reply

Your email address will not be published. Required fields are marked *

search previous next tag category expand menu location phone mail time cart zoom edit close