TransactionScope не откатывает транзакциюC#

Место общения программистов C#
Ответить
Anonymous
 TransactionScope не откатывает транзакцию

Сообщение Anonymous »

Вот текущая архитектура исходного кода области моей транзакции. Третья вставка вызывает исключение .NET (не исключение SQL) и не откатывает два предыдущих оператора вставки. Что я делаю не так?
РЕДАКТИРОВАТЬ:
Я удалил попытку/catch из вставки2 и вставки3. Я также удалил утилиту обработки исключений из вставки1 try/catch и поставил «throw ex». Он по-прежнему не откатывает транзакцию.
РЕДАКТИРОВАТЬ 2:
Я добавил try/catch обратно в метод Insert3 и просто добавил "throw " в операторе catch. Он по-прежнему не откатывает транзакцию.
ОБНОВЛЕНИЕ:
Судя по полученным отзывам, класс «SqlHelper» использует объект SqlConnection для устанавливает соединение с базой данных, затем создает объект SqlCommand, устанавливает для свойства CommandType значение «StoredProcedure» и вызывает метод ExecuteNonQuery объекта SqlCommand.

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

public void InsertStuff()
{
try
{
using(TransactionScope ts = new TransactionScope())
{
//perform insert 1
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for first insert */ };

sh.Insert("MyInsert1", sp);
}

//perform insert 2
this.Insert2();

//perform insert 3 - breaks here!!!!!
this.Insert3();

ts.Complete();
}
}
catch(Exception ex)
{
throw ex;
}
}

public void Insert2()
{
//perform insert 2
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for second insert */ };

sh.Insert("MyInsert2", sp);
}
}

public void Insert3()
{
//perform insert 3
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /*create parameters for third insert */ };

sh.Insert("MyInsert3", sp);
}
}


Подробнее здесь: https://stackoverflow.com/questions/339 ... ransaction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»