Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает

Я не уверен, ошибка ли это VB.NET или SQL Server. Но я получаю указанную выше ошибку со следующей трассировкой стека:

Это на Microsoft .NET Framework версии: 2.0.50727.3620; Версия ASP.NET: 2.0.50727.3618 и SQL Server 2008. В строке, которая помечает эту ошибку, указано:

Хотя я могу запустить эту хранимую процедуру в Query Analyzer, и она вернется через 8 секунд. В чем может быть причина и исправить?

1: PrintMessageGrid.DataSource = GlobalFunctions.GlobalF.GetComplaintTrendingList6(FirstMonthDate, LastMonthDate, TheLevel) 

Вот более подробная информация о том, где я объявляю эту функцию:

Странно то, что если я внесу это небольшое изменение в свою сохраненную процедуру, она пройдет, но не даст мне нужных мне данных: нет ошибок, но эта версия не дает мне того, что я хочу:

Public Shared Function GetComplaintTrendingList6(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer) As DataSet
    Dim DSPageData As New System.Data.DataSet
    Dim param(2) As SqlClient.SqlParameter

    param(0) = New SqlParameter("@FirstMonthDate", SqlDbType.DateTime)
    param(0).Value = FirstMonth
    param(1) = New SqlParameter("@LastMonthDate", SqlDbType.DateTime)
    param(1).Value = LastMonth
    param(2) = New SqlParameter("@TheLevel", SqlDbType.Int)
    param(2).Value = rowLevel

    ''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown 
    ''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database 
    Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
   cmd As New SQLCommand("ComplaintTrendingList6", conn), _
    da As New SQLDataAdapter(cmd)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddRange(param)

        da.Fill(DSPageData)
    End Using

    Return DSPageData
End Function

Сохраненная процедура, вызывающая ошибку:

SELECT E.PRODUCT_GROUP, a.QXP_SHORT_DESC, COUNT(DISTINCT A.QXP_EXCEPTION_NO), A.QXP_REPORT_DATE, DATEADD(M, DATEDIFF(M, 0, A.QXP_REPORT_DATE), 0) AS STARTDATE
FROM ALL_COMPLAINTS A
LEFT OUTER JOIN SMARTSOLVE.V_QXP_ISSUE_REF D ON A.QXP_ID = D.IRF_QXP_ID 
INNER JOIN CT_ProductFailures b ON b.old_modes = a.qxp_short_desc
LEFT OUTER JOIN [MANUAL].PRODUCTS E ON A.EPA_PRD_CODE = E.LIST_NUMBER 
LEFT JOIN SMARTSOLVE.V_CXP_CUSTOMER_PXP C ON A.QXP_ID = C.QXP_ID
INNER JOIN @SelectedLevels F ON A.[LEVEL] = F.LevelId
WHERE   --[LEVEL] > 0 AND
(A.QXP_SHORT_DESC <> 'Design Control') 
and A.QXP_REPORT_DATE >= @OneYearAgo AND A.QXP_REPORT_DATE <= @LastMonthDate
AND (C.QXP_EXCEPTION_TYPE <> 'Non-Diagnostic' OR C.QXP_EXCEPTION_TYPE IS NULL)  
GROUP BY E.PRODUCT_GROUP, A.QXP_REPORT_DATE,  A.QXP_SHORT_DESC 

То, что вы получаете с помощью Query Analyzer (или SSMS, в наши дни), и то, что получает ваше приложение, может сильно отличаться, в основном из-за сниффинга параметров.

INSERT #PVAL_NUM
SELECT E.PRODUCT_GROUP, b.new_modes 'QXP_SHORT_DESC', COUNT(DISTINCT A.QXP_EXCEPTION_NO), A.QXP_REPORT_DATE, DATEADD(M, DATEDIFF(M, 0, A.QXP_REPORT_DATE), 0) AS STARTDATE
FROM ALL_COMPLAINTS A
LEFT OUTER JOIN SMARTSOLVE.V_QXP_ISSUE_REF D ON A.QXP_ID = D.IRF_QXP_ID 
INNER JOIN CT_ProductFailures b ON b.old_modes = a.qxp_short_desc
LEFT OUTER JOIN [MANUAL].PRODUCTS E ON A.EPA_PRD_CODE = E.LIST_NUMBER 
LEFT JOIN SMARTSOLVE.V_CXP_CUSTOMER_PXP C ON A.QXP_ID = C.QXP_ID
INNER JOIN @SelectedLevels F ON A.[LEVEL] = F.LevelId
WHERE   --[LEVEL] > 0 AND
(A.QXP_SHORT_DESC <> 'Design Control') 
and A.QXP_REPORT_DATE >= @OneYearAgo AND A.QXP_REPORT_DATE <= @LastMonthDate
AND (C.QXP_EXCEPTION_TYPE <> 'Non-Diagnostic' OR C.QXP_EXCEPTION_TYPE IS NULL)
GROUP BY E.PRODUCT_GROUP, A.QXP_REPORT_DATE, b.new_modes

person salvationishere    schedule 03.05.2011    source источник


Ответы (4)


Я предлагаю прочитать эту статью Эрланда Соммарскога для получения подробной информации.

Вам необходимо увеличить время ожидания команды для команды выбора адаптера данных.

person Oded    schedule 03.05.2011

Ниже приведен код для увеличения времени ожидания команды для адаптера данных.

Тайм-аут соединения SQL отличается от тайм-аута, установленного для выполняемой команды.

adapter.SelectCommand.CommandTimeout = 0;

Это определяется следующим образом. Из MSDN

Получает время ожидания при попытке установить соединение перед прекращением попытки и созданием ошибки.

При установке тайм-аута подключения .. из MSDN

Вы можете установить время ожидания подключения до истечения времени ожидания с помощью ключевых слов ConnectTimeout или Connection Timeout в строке подключения. Значение 0 указывает на отсутствие ограничения, и его следует избегать в ConnectionString, поскольку попытка подключения ждет неопределенно долго.

Значение по умолчанию для всех таймаутов составляет 30 секунд.

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

person user_v    schedule 23.01.2012

Попробуйте добавить время ожидания подключения в web.config

".. операция с базой данных заняла слишком много времени, и она завершилась."

<add key="DBConnection" value="server=LocalHost;uid=sa;pwd=;database=DataBaseName;Connect Timeout=200; pooling='true'; Max Pool Size=200"/>
person Rob P.    schedule 03.05.2011
comment
[SqlException (0x80131904): истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.]
System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection) +1950890 System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection) +4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData () +33 System.Data.SqlClient.SqlDataReader.get_MetaData () +83 System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader dsset, runBeaderDataReader) +297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runB ehavior, Boolean returnStream, Boolean async) +954 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior, cmdBehavior, RunBehavior, runBehavior, Boolean returnStream, метод String, результат DbAsyncResmient. CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String метод) +32 System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) +141
System.Data.SqlClient.SqlCommand.ExehaviorD (поведение)
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (поведение CommandBehavior) +10
System.Data.Common.DbDataAdapter.FillInternal (набор данных DataSet, таблицы данных DataTable [], Int32 startRecord, Int32 maxRecords , String srcTable, команда IDbCommand, поведение CommandBehavior) +130
System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, Int32 startRecord, Int32 maxRecords, String src Таблица, команда IDbCommand, поведение CommandBehavior) +287
System.Data.Common.DbDataAdapter.Fill (DataSet dataSet) +94
GlobalFunctions.GlobalF.GetComplaintTrendingList6 (DateTime FirstMonth, DateTime LastMonth, Int32 rowLevel) +489
ASP.website_complaints_complainttrendinglist6_aspx.Main () в e: \ inetpub \ amdmetrics-d.web.abbott.com \ wwwroot \ Website \ Complaints \ ComplaintTrendingList6.aspx: 94 ASP.website_complaints_complainttrendinglist6_aspx. Page_Load (отправитель объекта, EventArgs E) в e: \ inetpub \ amdmetrics-d.web.abbott.com \ wwwroot \ Website \ Complaints \ ComplaintTrendingList6.aspx: 60 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o , Объект t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs e) +35
System.Web.UI.Control.OnLoad (EventArgs e) +99
System. Web.UI.Control.LoadRecursive () +50 System.Web.UI.Page.ProcessRequestMain (логическое includeStagesBeforeAsyncPoint, логическое includeStagesAfterAsyncPoint) +627 - person salvationishere; 03.05.2011

Это верно. Это происходит, когда возникает конфликт с вашим подключением к серверу.

Чтобы временно решить эту проблему ..

"Восстановите подключение к локальной сети"

Вы можете сделать это, щелкнув правой кнопкой мыши на своем соединении и выбрав «РЕМОНТ».

Чтобы навсегда решить эту проблему ..

В вашей рабочей группе не должно быть комбинации статических и динамических IP-адресов. Если вы хотите установить статическую группу, не включайте динамические соединения - наоборот.

После этого больше не должно быть ошибки с отображением «Истекло время ожидания».

ваше здоровье!

Роб, если бы эта сохраненная процедура занимала всего 8 секунд для запуска в QA, как вы думаете, время ожидания истечет с настройками тайм-аута по умолчанию?

person E-r Gabriel Doronila    schedule 21.06.2013