代码之家  ›  专栏  ›  技术社区  ›  laktak

SQL Server 10秒后超时

  •  1
  • laktak  · 技术社区  · 15 年前

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

    • 我们把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 回复  |  直到 15 年前
        1
  •  0
  •   Christian.K    15 年前

    我认为这不太可能,因为通常会产生一个不同的异常,但可能您遇到了默认的事务超时,顺便说一下是10秒。

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

    请注意,如果这确实解决了您的问题,那么您可能需要在代码中为有问题的事务指定实际的超时时间(例如,通过使用事务的相应选项) TransactionScope