Hola diego .. Aqui esta el codigo de la clase que manipula las transacciones y tiene el metodo que ejecuta los procedimientos almacenados ...

   private SqlConnection conn;
   private SqlTransaction trans;

   public void BeginTransaction()
   {
       conn = new SqlConnection(Configuracion.Cadena_conexion);
       conn.Open();
       trans = conn.BeginTransaction();
   }

   public void CommitTransaction()
   {
       trans.Commit();
   }

   public void RollbackTransaction()
   {
       trans.Rollback();
   }

   public void CloseTransaction()
   {
       trans = null;
       conn.Close();
       conn = null;
   }

public int Exec_StoredProc(string spname, List<SqlParameter>  parametros)
   {
       int Result = 0;

       SqlCommand Comando = new SqlCommand();
       Comando.CommandType = CommandType.StoredProcedure;
       Comando.CommandText = spname;
       Comando.Connection = conn;
       Comando.Transaction = trans;

       foreach (SqlParameter parametro in parametros)
       {
           Comando.Parameters.Add(parametro);
       }
       Result = Comando.ExecuteNonQuery();
       return Result;
   }

Ahora, estoy usando la clase de la siguiente manera :

Auxiliar_BaseDatos bd = new Auxiliar_BaseDatos();
       bd.BeginTransaction();

try
       {
           // Insertar enla tabla

           List<SqlParameter> parametros = new List<SqlParameter>();
           parametros.Clear();
           parametros.Add(new SqlParameter("@parametro 1", Valor 1));
           parametros.Add(new SqlParameter("@parametro 2", valor 2));
           parametros.Add(new SqlParameter("@parametro 3", valor 3));



           bd.Exec_StoredProc("NOMBRE_PROCEDIMIENTO", parametros);

bd.CommitTransaction();


       }
       catch
       {
           bd.RollbackTransaction();


       }
       finally
       {
           bd.CloseTransaction();
       }

Si pongo un break point antes del Commit, y reviso la base de datos, se realizaron los cambios. Que estoy haciendo mal ?

---
Agustin Galloso Viera
[EMAIL PROTECTED]


Responder a