Transacciones MySql implementadas en C#

WebProgramacion > Recursos sobre informática y tecnología > Programacion > C# > Transacciones MySql implementadas en C#
C#
Autor: Dámaso Velázquez Álvarez

En el siguiente ejemplo vamos a ver cómo podemos realizar una transacción en MySql. Lo implementaremos en C#.

Para ello vamos a ver el siguiente supuesto: Damos de alta un registro y necesitamos obtener el identificador que le ha correspondido al campo ID (clave primaria de la tabla, y autonumérico). Para ello tendremos un TableAdapter con los siguientes dos métodos:

  • addRegistro
  • getUltimoID

El motivo de usar transacciones en este supuesto, es para saber con exactitud que el ID que nos facilita el método getLastID es el producido por la llamada al método getUltimoID y no otra llamada concurrente que se haya podido producir.

Inicialmente debemos habilitar el adaptador para permitir transacciones.

Implementaremos un método de ejemplo llamado addRegistroque constará del siguiente código:

public static Int64 addRegistro(String texto)
{
   try
   {
      dsEjemploTableAdapters.ejemploTableAdapter adaptador
         = new Datos.dsEjemploTableAdapters.ejemploTableAdapter();
      //Abrimos la conexión
      adaptador.Connection.Open();
      //Iniciamos la transacción
      MySqlTransaction trans = adaptador.Connection.BeginTransaction();
      //Realizamos el alta en la tabla ejemplo
      adaptador.addRegistro("Hola mundo");
      Int64 last_id;
      //Obtenemos el ID correspondiente
      last_id = adaptador.getLastId().Value;
      //Validamos la transacción
      trans.Commit();
      return (last_id);
   }
   catch (Exception exc)
   {
      //Si algo falla, devolvemos -1
      return -1;
   }
}

Ahora vamos a ver una segunda versión donde haremos un RollBack de la transacción si algo falla:

public static Int64 addRegistro(String texto)
{
   dsEjemploTableAdapters.ejemploTableAdapter adaptador 
         = new Datos.dsEjemploTableAdapters.ejemploTableAdapter();
   //Abrimos la conexión
   if (adaptador.Connection.State != System.Data.ConnectionState.Open)
   {
      adaptador.Connection.Open();
   }
   //Iniciamos la transacción
   MySqlTransaction trans = adaptador.Connection.BeginTransaction();
   try
   {
      //Realizamos el alta en la tabla ejemplo
      adaptador.addRegistro("Hola mundo");
      Int64 last_id;
      //Obtenemos el ID correspondiente
      last_id = adaptador.getLastId().Value;
      //Validamos la transacción
      trans.Commit();
      return (last_id);
   }
   catch (Exception exc)
   {
      //Si algo falla, hacemos el RollBack de la transacción y devolvemos -1
      trans.Rollback();
      return -1;
   }
}