Возможно, соединение, на котором была сделка, было закрыто. Если это было так, когда это называлось:
_theTran.Commit();
Произойдет ошибка.
Тот, кто звонит
CommitTransaction
Должен выполнить некоторую проверку перед фиксацией, например, что-то вроде этого:
if (conn.State == ConnectionState.Open)
{
if (_theTran != null)
{
CommitTransaction();
}
conn.Close();
}
Что касается обработки исключений, то обработчик исключений ничего не делает, только перебрасывает. Если при коммите возникает исключение, попробуйте откат и всегда выбрасывайте. Я не думаю, что вам нужна внутренняя попытка поймать.
try
{
_theTran.Commit();
}
catch (Exception)
{
_theTran.Rollback();
throw;
}