【发布时间】:2012-12-03 16:30:02
【问题描述】:
简短: 在调用 transaction.Commit() 之后,下一个操作会失败,就像事务没有提交一样。
更多详情: 我们有一个线程运行对数据库的写查询,其中一些被封装在一个事务中。 一段时间后运行较重的负载时,我们会遇到提交事务后的操作失败并显示错误指示事务正在进行中的情况,具体取决于提交后执行的操作,我们会收到以下错误之一:
下一个操作是'开始交易:
...连接不支持并行事务...
下一个操作是插入/更新/删除
ExecuteNonQuery 需要命令 当分配给命令的连接处于 待处理的本地事务。命令的事务属性 尚未初始化。
通过调试器检查 Sql Connection 对象表明它包含一个“sqlInnerTransaction”对象,其父对象设置为空。
我们确实知道对“提交”的调用成功完成,没有出现错误。
运行.net 4.0,SQL Server 2008 R2 SP2
【问题讨论】:
-
你能添加一些代码吗?事务是如何开始和提交的?是否有可能出现异常导致错过提交?
-
我们正在使用 sqlCon.BeginStransaction() 和 transaction.Commit() 我们正在使用日志记录和附加调试器进行监控,要捕获的第一个异常是上面写的那个..
-
您可能应该在每次(未)成功的 Commit() 之后调用 Close() 或 Dispose()。使用
using语句最简单。 -
@HenkHolterman 我们在每次调用提交后调用 Dispose()
标签: c# sql sql-server-2008 database-connection clr4.0