TransactionScopeTransactionAbortedException–交易未回滚。应该吗?(SQLSERVER2008)如果TransactionScope(.Complete())发生事务超时错误,是否希望事务回滚?更新:错误实际上是在右花括号(即.Dispose())中抛出的,而不是.Complete()。完整的错误是:事务已中止。System.Transactions.TransactionAbortedExceptionTransactionAbortedExceptionSystem.Transactions.TransactionAbortedException:事务已中止。--->System.TimeoutException:事务超时---内部异常堆栈跟踪结束---在System.Transactions.TransactionStateAborted.BeginCommit(InternalTransactiontx,BooleanasyncCommit,AsyncCallbackasyncCallback,ObjectasyncState)在System.Transactions.CommittableTransaction。Commit()atSystem.Transactions.TransactionScope.InternalDispose()atSystem.Transactions.TransactionScope.Dispose(据我所知,在我对SPID/session_id发出KILL之前,事务不会回滚并且表保持锁定状态。我使用DBCCOPENTRAN获取最早的事务,然后终止它。我试过KILLWITHSTATUS但收到一条消息,说没有可用的状态,因为没有回滚。sys.dm_exec_sessions中SPID/session_id的状态是“休眠”。代码片段:try{using(vartransaction=newTransactionScope()){使用LINQENTITIES/SubmitChanges()等进行的大量工作transaction.Complete();//交易超时}返回结果;}catch(Exceptionex){logger.ErrorException(ex.Message,ex);结果失败(例如消息);返回结果;更新:问题没有完全解决,但其他人应该有更多信息。我正在使用LINQtoSQL并在我调用context.SubmitChanges()的事务范围内。我正在做很多插入。SQLServer事件探查器指示为每个插入发出单独的INSERT语句。在开发中,如果我在线程中休眠60秒(默认的TransactionScope超时为60秒),在调用SubmitChanges()之前,我在调用TransactionScope.Complete()时得到一个不同的错误(操作对状态无效交易。)。如果我在.SubmitChages()之后休眠60秒,就在.Complete()之前,我会得到“事务中止-System.TimeoutException:事务超时”但请注意,在我的开发机器上,当使用DBCCopentran时,没有找到打开的transaction-如果事务被回滚,这就是你所期望的。如果我随后将此问题底部的代码(抱歉,无法让网站将其插入此处)添加到我的配置文件中,这会将TransactionScope超时增加到2分钟,并且事情会再次开始工作(研究表明,如果这是'tworkmayhavealowerprioritysettinginmachine.config.虽然这将防止事务被中止,但由于更新的性质,它确实意味着对核心业务表的锁定可能长达2分钟,所以使用默认的SqlCommand超时30秒其他选择命令将超时。不理想,但比坐在那里并完全支持应用程序的开放交易要好。几天前我们有一个灾难性的版本,这意味着我们在升级磁盘空间(!),所以我们最终使用了收缩数据库功能,这显然会在您使用它后导致性能问题。我想重建数据库并重新考虑一些业务功能......我认为TransactionAbortedException实际上是超时。如果是Withthat,你应该会发现TransactionAbortedException的InnerException是超时了。您应该能够通过确保事务范围的超时超过命令超时来摆脱它。尝试将事务范围更改为以下内容:newTransactionScope(TransactionScopeOption.Required,TimeSpan.FromSeconds(60))并在您的上下文中设置明确的超时。它应该是这样的:myContext.CommandTimeout=30;//这秒我解决了修改“物理文件”machine.config的问题。1.你必须本地化文件:2.你必须添加以下代码:以上是C#学习教程:TransactionScopeTransactionAbortedException-transactionisnotrolledback。应该吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
