System.Data.SqlClient.SqlException (0x80131904): истекло время ожидания выполнения с номером ошибки: -2 - PullRequest
0 голосов
/ 16 мая 2019

У меня есть приложение C # .NET 4.7.2, которое подключается к SQL Server 2014. Одна из хранимых процедур, вызываемых из приложения, приводит к следующей ошибке:

xyzStoredProcedure: Exception encountered. System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Application.SomeMethod()
ClientConnectionId: {f0b2bed5-8baf-444a-b969-500ac2ca3aad}
Error Number:-2,State:0,Class:11

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

Однако MSDN описывает Error Number:-2, показанный в конце стека исключений, как показано на рисунке.

enter image description here Message Text, Explanation из изображения и Execution Timeout Expired из стека исключений, похоже, не согласуются друг с другом.

Вопросы:

  1. MSDN неверен?

  2. Может кто-нибудь объяснить, что может вызвать Execution Timeout Expired с Error Number: -2? Другие хранимые процедуры из того же процесса приложения, той же строки подключения, той же базы данных и примерно в одно и то же время этой ошибки работают нормально.

  3. Что представляют State и Class Number в стеке исключений?

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