加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server,C#:事务回滚超时异常

发布时间:2020-12-12 16:28:57 所属栏目:MsSql教程 来源:网络整理
导读:我有一个奇怪的问题.我有一个.NET程序,我的进程逻辑在SQL Server 2005数据库上需要一个长时间运行的事务(?20分钟).没关系,因为没有人并行访问数据库.当出现问题时,应该回滚事务. 不频繁且没有任何可见的模式,我的DbTransaction对象上的Rollback()操作会引发Sq
我有一个奇怪的问题.我有一个.NET程序,我的进程逻辑在SQL Server 2005数据库上需要一个长时间运行的事务(?20分钟).没关系,因为没有人并行访问数据库.当出现问题时,应该回滚事务.

不频繁且没有任何可见的模式,我的DbTransaction对象上的Rollback()操作会引发SqlException:

Message: "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."

StackTrace:
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32 error)
   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult,TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected)
   at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
   at System.Data.SqlClient.TdsParserStateObject.ReadByte()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer,TransactionManagerRequestType request,String transactionName,TransactionManagerIsolationLevel isoLevel,Int32 timeout,SqlInternalTransaction transaction,TdsParserStateObject stateObj,Boolean isDelegateControlRequest)
   at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest,IsolationLevel iso,SqlInternalTransaction internalTransaction,Boolean isDelegateControlRequest)
   at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest,String name,Boolean isDelegateControlRequest)
   at System.Data.SqlClient.SqlInternalTransaction.Rollback()
   at System.Data.SqlClient.SqlTransaction.Rollback()

我不知道这是否真的是一个超时问题,因为这个代码有时候有时候不工作.此外,我知道的唯一超时是ConnectionTimeout和CommandTimeout,但显然这些不是这种情况下的问题.

有没有人有这个问题的想法?

非常感谢Matthias

解决方法

Sql Server团队的Matt Neerincx在 MSDN forum question中解决了这个问题.奇怪的是,连接字符串的连接超时用于设置超时.他验证了他的源代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读