powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / "Серверный" откат клиентской транзакции
3 сообщений из 3, страница 1 из 1
"Серверный" откат клиентской транзакции
    #32141132
Alexei Petrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть приложение на С#, использующее ADO.NET.
Внутри одного из методов приложения делаю следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
открываю тразакцию (BeginTransaction)
try
  запускаю запрос к БД
  подтверждаю транзакцию (Commit)
catch
  откатываю транзакцию (Rollback)
end //of try-catch


То есть, если происходит ошибка, то транзакция откатывается, если всё в порядке - подтверждается. Используется экземпляр класса System.Data.SqlClient.SqlTransaction.
Всё вроде хорошо работает, но запрос вставляет данные в некую таблицу, на который висит триггер, проверяющий целостность. Если вставляемые данные нарушают её, то триггер откатывает вставку (в теле триггера есть команда rollback tran). В итоге после срабатывания триггера, когда управление переходит на оператор commit или rollback внутри программы, то происходит исключение, так как транзакция уже отменена триггером.
Вопрос: можно ли как-то узнать, что транзакция уже отменена (или подтверждена) на сервере и её не следует откатывать вновь в приложении?

Списибо.

ПС: сервер: MS SQL 2000, триггер менять нельзя.
...
Рейтинг: 0 / 0
"Серверный" откат клиентской транзакции
    #32141159
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть в MS SQL Server переменная такая, @@TRANCCOUNT, кажется, называется. Можно ею воспользоваться.
...
Рейтинг: 0 / 0
"Серверный" откат клиентской транзакции
    #32141351
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
try
{
  запускаю запрос к БД
  подтверждаю транзакцию (Commit)
}
catch (...)
{
 try
 {
  откатываю транзакцию (Rollback)
 }
 catch (SqlException sqex) 
 { 
...
}
}
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / "Серверный" откат клиентской транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]