我们在C#legacy应用程序中使用OleDbConnection连接到SQL Server 2000
然而,当我们在服务器运行缓慢时运行命令(事务中的一些插入)时,查询仅在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秒?
答案 0 :(得分:0)
我认为这不太可能,因为通常产生一个不同的异常,但也许你正在遇到默认的事务超时,这偶然是10秒。
将以下内容添加到“app.config”中,并将超时调整为更大的值:
<system.transactions>
<defaultSettings timeout="00:10:00"/>
</system.transactions>
请注意,如果这实际上解决了您的问题,您可能希望在代码中指定实际超时,仅针对相关事务(例如,通过使用TransactionScope
类的相应选项)。