【发布时间】:2011-04-27 23:50:25
【问题描述】:
我遇到了一个奇怪的问题。我有一个 .NET 程序,我的流程逻辑需要在 SQL Server 2005 数据库上执行长时间运行的事务(约 20 分钟)。没关系,因为没有人并行访问数据库。当出现问题时,事务应该回滚。
很少且没有任何可见模式我的DbTransaction 对象上的Rollback() 操作会抛出SqlException:
消息:“超时已过。在操作完成之前超时时间已过,或者服务器没有响应。” 堆栈跟踪: 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32 错误) 在 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult,TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 字节预期) 在 System.Data.SqlClient.TdsParserStateObject.ReadBuffer() 在 System.Data.SqlClient.TdsParserStateObject.ReadByte() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(字节 [] 缓冲区,TransactionManagerRequestType 请求,字符串 transactionName,TransactionManagerIsolationLevel isoLevel,Int32 超时,SqlInternalTransaction 事务,TdsParserStateObject stateObj,布尔 isDelegateControlRequest) 在 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest,字符串 transactionName,IsolationLevel iso,SqlInternalTransaction internalTransaction,布尔 isDelegateControlRequest) 在 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest,字符串名称,IsolationLevel iso,SqlInternalTransaction internalTransaction,布尔 isDelegateControlRequest) 在 System.Data.SqlClient.SqlInternalTransaction.Rollback() 在 System.Data.SqlClient.SqlTransaction.Rollback()
我不知道这是否真的是一个超时问题,因为代码有时有效,有时无效。此外,我知道的唯一超时是 ConnectionTimeout 和 CommandTimeout,但显然在这种情况下这些不是问题。
有人知道这个问题吗?
非常感谢,马蒂亚斯
【问题讨论】:
-
服务器日志什么也没说? (MS SQL)认为回滚可能会很重..?
-
你提到.net程序是winforms还是webforms?
-
您是指“sys.xp_readerrorlog”吗?不显示任何错误...
标签: c# sql-server transactions timeout sqlexception