2009-03-16 20 views
6

Quiero hacer una inserción y una actualización en 2 tablas separadas, pero tenerlas en 1 transacción).¿Puede tener múltiples MySqlCommand en una sola transacción?

Esencialmente en pseudocódigo que quiero hacer algo como:

MySqlTransaction trans = null; 
try 
{ 
    _Connection.Open(); 
    trans = _Connection.BeginTransaction(); 
    insertCmd.Transaction = trans; 
    updateCmd.Transaction = trans; 

    Int32 id = insertCmd.ExecuteNonQuery(); 
    updateCmd.Parameters.Add(new MySqlParameter("oid", MySqlDbType.Int32).Value = id); 
    updateCmd.ExecuteNonQuery(); 
} 
catch(MySqlException) 
{ 
    if(trans != null) 
     trans.RollBack(); 
} 
finally 
{ 
    _Connection.Close(); 
} 

es esto posible O voy de este por el camino equivocado?

Respuesta

6

Sí se puede hacer si:

  • Todas las mesas se apoyan, (tablas InnoDB lo soportan, pero las tablas MyISAM no lo hacen)
  • Las consultas no afectan a la base de datos de esquema. (ALTER TABLE, DROP TABLE, CREATE TABLE, etc. hace que la transacción se confirme)
3

Sí, puede ejecutar varios comandos en una sola transacción. Esto le permitiría hacer exactamente lo que está tratando de hacer: todos los comandos, o ninguno de ellos.

Cuestiones relacionadas