存储过程调用具有OperationBehavior属性的方法:事务问题

时间:2010-05-12 14:22:27

标签: .net wcf stored-procedures ado.net

我正在使用ADO.Net的ExecuteNonQuery来调用存储过程,就像独立的魅力一样,但在实现它时应该调用它我遇到了有关事务的问题。

例如

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 :(得分:0)

如果没有看到存储过程,很难确切地知道发生了什么。我怀疑存储过程中存在一些错误,并且事务处理代码没有正确执行。

这个SO问题似乎适用于您的情况:TransactionScope and Transactions

要在事务之外运行存储过程,您需要将代码包装在禁止环境事务的TransactionScope中:

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

作为最佳做法,我建议在存储过程中混合使用.NET事务和SQL事务。