Использование и транзакции - PullRequest
2 голосов
/ 01 февраля 2011

Пожалуйста, дайте мне знать, если приведенный ниже код правильный. Я имею в виду соединение закрыто и ликвидировано и транзакция закрыта и ликвидирована и откатана в случае исключения. Любые другие предложения приветствуются.

Спасибо, Adrya

using (FbConnection c = new FbConnection(m_connection))
{
    c.Open();
    using (FbTransaction trans = c.BeginTransaction())
    {
        using (FbCommand cmd = new FbCommand("DELETE_MESSAGES_QUEUE", c, trans))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        using (FbCommand cmd = new FbCommand("DELETE_QUEUE", c, trans))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        trans.Commit();
    }
}

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Да, этот код выглядит отлично.

0 голосов
/ 17 июля 2018

Да, это так. Метод Dispose будет располагать базовой транзакцией, а если транзакция все еще выполняется, выполняется откат (, т.е. здесь ).

Если исключение происходит на стороне сервера (или т. Е. Соединение потеряно), сервер откатывает транзакцию.

0 голосов
/ 01 февраля 2011

Я бы, вероятно, вместо этого использовал бы область транзакции, но не уверен, что удаление транзакции откатит ее назад, однако TransactionScope делает.

...