2009-03-16 15 views
6

Voglio fare un inserimento e un aggiornamento su 2 tabelle separate, ma sono in 1 transazione).Puoi avere più MySqlCommand in una singola transazione?

sostanzialmente in pseudocodice voglio fare qualcosa di simile:

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(); 
} 

è possibile o sto andando su questo nel modo sbagliato?

risposta

6

Sì, è possibile se:

  • Tutte le tabelle supportano, (tabelle InnoDB supportano, ma le tabelle MyISAM non lo fanno)
  • Le query non influenzano il database-schema. (ALTER TABLE, DROP TABLE, CREATE TABLE, ecc causa il commit della transazione)
3

Sì, è possibile eseguire più comandi all'interno di una singola transazione. Questo ti permetterebbe di fare esattamente quello che stai cercando di fare: tutti i comandi, o nessuno di loro.

Problemi correlati