Можете ли вы иметь несколько MySqlCommand в одной транзакции? - PullRequest
6 голосов
/ 16 марта 2009

Я хочу сделать вставку и обновление для 2 отдельных таблиц, но они должны быть в одной транзакции).

По сути, в псевдокоде я хочу сделать что-то вроде:

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

возможно ли это или я поступаю неправильно?

Ответы [ 2 ]

6 голосов
/ 16 марта 2009

Да, если:

  • Все таблицы поддерживают его (таблицы InnoDB поддерживают, но таблицы MyIsam - нет)
  • Запросы не влияют на схему базы данных. (ALTER TABLE, DROP TABLE, CREATE TABLE и т. Д. Приводит к фиксации транзакции)
3 голосов
/ 16 марта 2009

Да, вы можете выполнить несколько команд в одной транзакции. Это позволит вам делать именно то, что вы пытаетесь сделать: все команды или ни одну из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...