2009-03-16 4 views
6

Je veux faire une insertion et une mise à jour sur 2 tables séparées, mais les avoir dans une transaction).Pouvez-vous avoir plusieurs MySqlCommand dans une seule transaction?

essentiellement pseudocode je veux faire quelque chose comme:

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

est-ce possible ou vais-je sur ce dans le mauvais sens?

Répondre

6

Oui, vous pouvez, si:

  • Toutes les tables prennent en charge, (tables InnoDB supportent, mais les tables MyISAM ne le font pas)
  • Les requêtes n'affectent pas la base de données schéma. (ALTER TABLE, DROP TABLE, CREATE TABLE, etc. provoque la validation de la transaction)
3

Oui, vous pouvez exécuter plusieurs commandes au sein d'une même transaction. Cela vous permettrait de faire exactement ce que vous essayez de faire: toutes les commandes, ou aucune d'entre elles.

Questions connexes