Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Baxster
Member

Откуда:
Сообщений: 20
Доброго времени суток.
Возник вопрос при использовании на шарпе StoredProcedures, написанных для дельфи.
суть такова: имеется хранимка (для удаления/модификации какой-то таблицы) внутри которой проверяются параметры на корректность и возможность удаления/модификации. проверки осуществляются следующим образом:
if @id is null or @vid is null 
  BEGIN
    RAISERROR ('Не заданы входные параметры.(sp_table_d)', 16, 1);
    ROLLBACK TRANSACTION;
  END;

Внутри производится еще несколько проверок на корректность и т.п.
суть в том, что Exception, вылетающий из команды содержит довольно много текста и при том не особо по делу
Не заданы входные параметры.(sp_table_d)
Еще одна проверка не прокатила.(sp_table_d)
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.

в шарпе запуск процедуры выполняется аналогично примеру на данной страничке

возник вопрос, а собственно, почему "у меня" оно вылетает с большим числом лишних ошибок, а на дельфи при вызове той же функции и открытии транзакции так же снаружи - не вылетает, а только сообщение из RAISERROR.
Кто сталкивался с такими проблемами, подскажите, что делать?
12 окт 11, 11:57    [11425561]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Baxster
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.

А это уже ваша логическая ошибка кода
Который выполняет ROLLBACK TRANSACTION без проверки наличия этой самой транзакции
12 окт 11, 12:00    [11425581]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Baxster
Member

Откуда:
Сообщений: 20
Glory
А это уже ваша логическая ошибка кода
Который выполняет ROLLBACK TRANSACTION без проверки наличия этой самой транзакции


проблема в том, что это чужой код.. он работает в чужой программе.. может в дельфях реализация чем-то отличается?
внутри программы открывается транзакция, после выполнения делается коммит, а если происходит exception, то делается роллбэк.
получается, что эти роллбэки являются лишними?
12 окт 11, 12:15    [11425710]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Baxster
проблема в том, что это чужой код.. он работает в чужой программе.. может в дельфях реализация чем-то отличается?

Сервер вам сообщает, что не может выполнить ROLLBACK TRANSACTION в виду отсутствия транзакции
Причем тут дельфи и чужая программа ?
Если вам наплевать на какие-то сообщения сервера, тогда делайте обработку этих сообщений
12 окт 11, 12:17    [11425720]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Baxster
при использовании на шарпе StoredProcedures, написанных для дельфи.


SP пишутся исключительно НА T-SQL и ДЛЯ движка сервера. На шарпе пишутся методы. На делфи - всякая хрень.

Для ответа на ваш вопрос придется сопоставить:

-код хранимки
-метод шарпа
-хрень из делфи

Это все потому, что инициировать/финализировать транзакции можно отовсюду. И, полагаю, тут-то у вас косяки и лезут...
12 окт 11, 13:12    [11426161]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Baxster,

Потому что дельфийские ado-компоненты вытягивают только первое сообщение из коллекции ошибок, а шарп честно показывает все.
13 окт 11, 00:07    [11430691]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK TRANSACTION. Delphi -> C#. тонкости реализации?  [new]
Baxster
Member

Откуда:
Сообщений: 20
Mind
Baxster,

Потому что дельфийские ado-компоненты вытягивают только первое сообщение из коллекции ошибок, а шарп честно показывает все.

вот за это спасибо.. теперь можно будет с полной уверенностью говорить разработчику на дельфи, что он не прав, пихая в процедуры ROLLBACK TRANSACTION
13 окт 11, 09:40    [11431395]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить