none
¿Como programo un método Transaccional? RRS feed

  • Pregunta

  • Amigos:

    Les comento, necesito realizar varias transacciones en mi desarrollo y me gustara poder realizar un método que me simplifique el trabajo. Tengo un código que encontré en internet pero no se si sea del todo confiable y me gustaría que me dieran una mano con esto. Yo ahora estoy usando MySql como motor de BDD y ha presentado algunas fallas, tal vez tenga algo que ver con el método que estoy usando por eso preferí consultarlo.

    Acá les dejo el código:

    //  METODO QUE EJECUTARÁ 'X' CANTIDAD DE COMANDOS DENTRO DE UNA TRANSACCION
            public bool ComandosTransaccion(List<String> ListaComandos)
            {
                // VARIABLES PARA HACER LA TRANSACCION
                MySqlTransaction varTransaccion = null;
    
                try
                {
                    Conexion = new MySqlConnection(StringConexion.ToString());
                    // ABRIMOS LA CONEXION
                    Conexion.Open();
    
                    // Inicializas la transaccion
                    varTransaccion = Conexion.BeginTransaction();
                    MySqlCommand ComandoSQL = new MySqlCommand();
    
    
                    //  RECORRO LOS ELEMENTOS DE LA LISTA<STRING> QUE PASE POR PARAMETRO
                    for (int i = 0; i < ListaComandos.Count; i++)
                    {
    
                        Console.WriteLine(ListaComandos[i]);
    
                        // EJECUTO LOS COMANDOS QUE RECIBI POR PARAMETRO COMO PARTE DE LA TRANSACCION
                        ComandoSQL = new MySqlCommand(ListaComandos[i], Conexion, varTransaccion);
                        ComandoSQL.ExecuteNonQuery();
                    }
    
                    //TERMINA EL PROCESO Y CONFIRMO LOS CAMBIOS
                    varTransaccion.Commit();
                    ComandoSQL.Dispose();
    
                    return true;// RETORNO OK
                }
                catch (Exception evt)
                {
                    //SI LA VARIABLE NO ES NULA RELIZAMOS EL ROLLBACK CORRESPONDIENTE 
                    if (varTransaccion != null)
                    {
                        varTransaccion.Rollback();
                    }//LANZO MENSAJE DE ERROR DESDE Y RETORNO FALSO
                    MessageBox.Show("Error en la Transaccion - Detalles: "+evt.Message,"Atencion",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                    return false;//  RETORNO ERROR
                }

    lunes, 10 de diciembre de 2018 14:51

Respuestas

Todas las respuestas

  • Buenas

    A priori ese código que tienes debería funcionar bien, el único problema que le veo es que solo vale para operaciones de escritura, y no permite hacer selects, pero si esto te vale,no esta mal, hay maneras mejores, pero esta bien.

    Que problemas le has detectado?

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    Mi Blog


    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    lunes, 10 de diciembre de 2018 15:22
  • hola

    Eso que intentas lograr se llama UoW (Unit of Work) donde defines operaciones que realizas bajo una transaccion

     Unit of work sample implementation for ADO.NET

    como veras tienes clases de repository a las cuales le pasas la instancia de UoW para que orqueste las transacciones, esa e sla forma correcta y no una lista de comando en un string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 10 de diciembre de 2018 15:33