Тайм-аут SQL Server через 10 секунд - PullRequest
1 голос
/ 15 сентября 2010

Мы используем OleDbConnection в унаследованном приложении C # для подключения к 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 голосов
/ 16 сентября 2010

Я думаю, что это не слишком вероятно, потому что обычно выдает другое исключение, но, возможно, вы работаете с тайм-аутом транзакции по умолчанию, который составляет 10 секунд.

Добавьте следующее в ваше приложение.config "и измените таймаут на большее значение:

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

Обратите внимание, что если это действительно решит вашу проблему, вы можете указать фактическое время ожидания в вашем коде только для рассматриваемой транзакции (например,используя соответствующие опции для класса TransactionScope).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...