10秒后的SQL Server超时

时间:2010-09-15 08:45:04

标签: .net sql-server timeout

我们在C#legacy应用程序中使用OleDbConnection连接到SQL Server 2000

  • 连接字符串包含“Connect Timeout = 5;”和
  • 我们将CommandTimeout设置为30秒。

然而,当我们在服务器运行缓慢时运行命令(事务中的一些插入)时,查询仅在10秒后超时。

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   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.SqlInternalConnectionTds.ExecuteTransactionPreYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction)
   at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction)
   at System.Data.SqlClient.SqlInternalTransaction.Commit()
   at System.Data.SqlClient.SqlTransaction.Commit()
   [...]

我错过了什么?是否有超时值,我没有设置为默认值为10秒?

1 个答案:

答案 0 :(得分:0)

我认为这不太可能,因为通常产生一个不同的异常,但也许你正在遇到默认的事务超时,这偶然是10秒。

将以下内容添加到“app.config”中,并将超时调整为更大的值:

<system.transactions>
     <defaultSettings timeout="00:10:00"/>  
</system.transactions>

请注意,如果这实际上解决了您的问题,您可能希望在代码中指定实际超时,仅针对相关事务(例如,通过使用TransactionScope类的相应选项)。