Foros del Web » Programación para mayores de 30 ;) » .NET »

transacciones en distintas funciones

Estas en el tema de transacciones en distintas funciones en el foro de .NET en Foros del Web. Que tal. Estoy intentando un proceso que llevo a cabo en varios procedimientos, pero necesito usar transacciones. Actualmente lo hago de esta forma: Código: private ...
  #1 (permalink)  
Antiguo 07/07/2009, 09:27
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años
Puntos: 0
transacciones en distintas funciones

Que tal.
Estoy intentando un proceso que llevo a cabo en varios procedimientos, pero necesito usar transacciones.

Actualmente lo hago de esta forma:

Código:
private void accion()
{
      SqlTransaction trans;
      abreCnx();
      trans = cnx.BeginTransaction();

      try
      {
            string Consulta = "...";
            sqlcommand cmd = new sqlcommand(consulta, cnx, trans);
            cmd.executeNomQuery();

            accion2();

            trans.commit();
      }
      Catch(Exception)
      {
           trans.rollback();
           throw;
      }
      finally
      {
           cierraCnx();
      }
}


private void accion2()
{
      SqlTransaction trans;
      abreCnx();
      trans = cnx.BeginTransaction();

      try
      {
            string Consulta = "...";
            sqlcommand cmd = new sqlcommand(consulta, cnx, trans);
            cmd.executeNomQuery();
            trans.commit();
      }
      Catch(Exception)
      {
           trans.rollback();
           throw;
      }
      finally
      {
           cierraCnx();
      }
}
Pero este codigo no me funciona, ya que si accion2 se ejecuta correctamente, hace el commit, y si accion falla, le hace rollback solo a lo de accion, pero accion2 ya hizo lo que tenia que hacer y no se deshace.

Como puedo hacerlo?

Espero que me haya dado a entender y que me puedan ayudar.

Gracias
  #2 (permalink)  
Antiguo 08/07/2009, 10:00
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 1 mes
Puntos: 87
Respuesta: transacciones en distintas funciones

Dale una vuelta a Transaction Scope
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 09/07/2009, 08:34
 
Fecha de Ingreso: agosto-2008
Mensajes: 101
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: transacciones en distintas funciones

Hola Jorges.

Lo que pasa en tu caso es que tiene dos procedimientos y cada uno de estos tiene su objeto transaccion, asi que si los ejecutas en secuencia seran independientes.

Lo que necesitas es que el objeto transaccion sea uno solo para los dos procedimientos, por lo tanto, enviale el objeto transaccion de accion como parametro a accion2() y asignaselo al command que ejecutas en acccion2().

Recuerda quitar en accion2() la declaracion de un objeto transacccion y tambien quita el rollback, ya que de eso se encargara el procedimiento accion().

Saludos.
  #4 (permalink)  
Antiguo 09/07/2009, 14:53
 
Fecha de Ingreso: enero-2007
Ubicación: Tingo María - Perú
Mensajes: 399
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: transacciones en distintas funciones

Cita:
Iniciado por Phillip Ver Mensaje
Hola Jorges.

Lo que pasa en tu caso es que tiene dos procedimientos y cada uno de estos tiene su objeto transaccion, asi que si los ejecutas en secuencia seran independientes.

Lo que necesitas es que el objeto transaccion sea uno solo para los dos procedimientos, por lo tanto, enviale el objeto transaccion de accion como parametro a accion2() y asignaselo al command que ejecutas en acccion2().

Recuerda quitar en accion2() la declaracion de un objeto transacccion y tambien quita el rollback, ya que de eso se encargara el procedimiento accion().

Saludos.
Completamente deacuerdo con: Peterpay
es mejor usar TransactionScope
__________________
Vivir para ser buenos y ser buenos para servir mejor.
  #5 (permalink)  
Antiguo 09/07/2009, 17:41
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 22 años, 2 meses
Puntos: 15
Respuesta: transacciones en distintas funciones

Si te fijas aquí http://msdn.microsoft.com/es-es/libr...ansaction.aspx

Podras ver como es que se relaciona el Command con el Transaction, tan fácil lo hace que puedes usar un mismo Command conectado a un Transaction y que le cargue varios Querys.

SqlCommand cmd = new SqlCommand(consulta, connection, transaction);
cmd.ExecuteNonQuery();

cmd.CommandText = otraconsulta;
cmd.ExecuteNonQuery();

cmd.CommandText = Yotraconsulta;
cmd.ExecuteNonQuery();

Tran.Commit();

Leete lo que explica Microsoft pero cada ves que mandas un ExecuteNonQuery el Transaction lo agrega en su lista y al final cuando cargues todos los querys que quieras llamas el Commit() y se procesan los querys.

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:51.