我正在使用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在此事务之外执行存储过程?
存储过程包含插入语句和事务,但删除它们不会改变行为......
答案 0 :(得分:0)
如果没有看到存储过程,很难确切地知道发生了什么。我怀疑存储过程中存在一些错误,并且事务处理代码没有正确执行。
这个SO问题似乎适用于您的情况:TransactionScope and Transactions
要在事务之外运行存储过程,您需要将代码包装在禁止环境事务的TransactionScope
中:
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
{
// call SP
}
作为最佳做法,我建议不在存储过程中混合使用.NET事务和SQL事务。