Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: salvationishereОтветов: 4

Я не уверен, ошибка ли это 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

timeoutvisual-studio-2008

Ответы

Ответ 1 · рейтинг 3 · Oded

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

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

Ответ 2 · рейтинг 9 · user_v

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

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

adapter.SelectCommand.CommandTimeout = 0;

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

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

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

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

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

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

Ответ 3 · рейтинг 4 · Rob P.

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

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

<add key="DBConnection" value="server=LocalHost;uid=sa;pwd=;database=DataBaseName;Connect Timeout=200; pooling='true'; Max Pool Size=200"/>

Ответ 4 · рейтинг -1 · E-r Gabriel Doronila

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

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

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

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

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

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы