Проблема транзакции при выполнении кода C # - PullRequest
0 голосов
/ 25 июля 2011

В М-коде я получаю сообщение об ошибке: «Эта SqlTransaction завершена; она больше не может использоваться» Строка кода, которая генерирует этот код, это SqlTransaction

MSSqlConnectionHandler.CommitTransaction();

Эта функция CommitTransaction имеет значение

public static void CommitTransaction()
    {
        try
        {
            _theTran.Commit();
        }
        catch (Exception Ex)
        {
            try
            {
                _theTran.Rollback();
            }
            catch (Exception InnerEx)
            {
                throw InnerEx;
            }
            throw Ex;
        }
    }

Но я закомментирую этот MSSqlConnectionHandler.CommitTransaction (); В этом случае ошибка не возникла, но данные также не сохраняются. Что происходит не так, что я должен предоставить здесь, чтобы сделать это более ясным? Спасибо заранее

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Возможно, соединение, на котором была сделка, было закрыто. Если это было так, когда это называлось:

_theTran.Commit(); 

Произойдет ошибка.

Тот, кто звонит

CommitTransaction

Должен выполнить некоторую проверку перед фиксацией, например, что-то вроде этого:

if (conn.State == ConnectionState.Open) 
{
     if (_theTran != null)
     {
          CommitTransaction();
     }
     conn.Close();
}

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

try
{             
    _theTran.Commit();         
}         
catch (Exception)
{                        
    _theTran.Rollback();             
    throw;
} 
1 голос
/ 25 июля 2011

Ошибка указывает, что транзакция фиксируется где-то еще в вашем коде, является ли _theTran переменной экземпляра, которую можно использовать и фиксировать где-то еще?

...