Вызов хранимой процедуры в методе с атрибутом OperationBehavior: проблемы с транзакциями - PullRequest
0 голосов
/ 12 мая 2010

Я использую ADO.Net ExecuteNonQuery для вызова хранимой процедуры, работает как отдельная функция charm, но при реализации ее там, где она должна вызываться, у меня возникают проблемы с транзакциями.

Например

System.Data.SqlClient.SqlException: Transaction count after EXECUTE indicates a 
mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.

, а также таймаут сразу после этого.

Я только что обнаружил, что метод, который вызывает хранимую процедуру, помечен следующим атрибутом WCF:

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]

Как это повлияет на вызов моей хранимой процедуры? Как я могу сказать .Net выполнить хранимую процедуру вне этой транзакции?

Хранимая процедура содержит операторы вставки, а также транзакцию, но их удаление не меняет поведение ...

1 Ответ

0 голосов
/ 12 мая 2010

Трудно точно знать, что происходит, не видя хранимую процедуру.Я подозреваю, что в хранимой процедуре есть какая-то ошибка, и код обработки транзакции не выполняется должным образом.

Похоже, что эти вопросы SO относятся к вашей ситуации: TransactionScope and Transactions

Чтобы запустить вашу хранимую процедуру вне транзакции, вы должны заключить код в TransactionScope, который подавляет внешнюю транзакцию:

using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) 
{
     // call SP
} 

В качестве лучшей практики я бы рекомендовал не смешивать транзакции .NET и транзакции SQL в хранимых процедурах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...