2010-05-12 19 views
0

我正在使用ADO.Net的ExecuteNonQuery來調用存儲過程,就像一個獨立的魅力,但實現它時應該被稱爲我跑到有關交易的問題。與OperationBehavior屬性的方法中的存儲過程調用:交易的問題

例如

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在此事務之外執行存儲過程?

存儲過程包含INSERT語句,也是一個交易,但刪除它們不改變行爲......

回答

0

很難知道到底是怎麼回事,沒有看到該存儲過程。我懷疑存儲過程中有一些錯誤,並且事務處理代碼沒有正確執行。

這SO問題似乎適用於您的情況:TransactionScope and Transactions

要運行在一個事務之外的存儲過程,你想包你的代碼在TransactionScope抑制的環境事務:

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

由於一個最佳實踐,我會推薦而不是在存儲過程中混合.NET事務和SQL事務。