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#