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:
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 addRegistro
que 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;
}
}