Тайм-аут истек. Время ожидания истекло до завершения операции или сервер не отвечает - PullRequest
5 голосов
/ 03 мая 2011

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

[SqlException (0x80131904): время ожидания истекший. Истек срок ожидания до завершения операции или сервер не отвечает.]
System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean 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 ds, RunBehavior, runBehavior, String resetOptionsString) + 297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String, Результат DbAsyncResult) + 162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String) +32 System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) + 141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior поведение) + 12
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (CommandBehavior поведение) + 10
System.Data.Common.DbDataAdapter.FillInternal (DataSet набор данных, DataTable [] datatables, Int32 startRecord, Int32 maxRecords, строка srcTable, команда IDbCommand, Поведение CommandBehavior) + 130
System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, Команда IDbCommand, CommandBehavior поведение) + 287
System.Data.Common.DbDataAdapter.Fill (DataSet набор данных) + 94
GlobalFunctions.GlobalF.GetComplaintTrendingList6 (DateTime FirstMonth, DateTime LastMonth, Int32 rowLevel) + 489
ASP.website_complaints_complainttrendinglist6_aspx.Main () в е: \ Inetpub \ amdmetrics-d.web.abbott.com \ Wwwroot \ Сайт \ Жалобы \ ComplaintTrendingList6.aspx: 94 ASP.website_complaints_complainttrendinglist6_aspx.Page_Load (Объект Отправитель, EventArgs E) в е: \ Inetpub \ amdmetrics-d.web.abbott.com \ Wwwroot \ Сайт \ Жалобы \ ComplaintTrendingList6.aspx: 60 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, объект o, объект t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Object отправитель, EventArgs e) + 35
System.Web.UI.Control.OnLoad (EventArgs д) + 99
System.Web.UI.Control.LoadRecursive () +50 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 627

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

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

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

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

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 

Ошибка сохраняемого процесса:

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

Ответы [ 4 ]

7 голосов
/ 23 января 2012

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

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

adapter.SelectCommand.CommandTimeout = 0;

Время ожидания соединения SQL отличаетсяот таймаута, установленного для Команды, которая выполняется.

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

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

При установке времени ожидания соединения .. из MSDN

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

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

4 голосов
/ 03 мая 2011

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

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

<add key="DBConnection" value="server=LocalHost;uid=sa;pwd=;database=DataBaseName;Connect Timeout=200; pooling='true'; Max Pool Size=200"/>
3 голосов
/ 03 мая 2011

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

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

0 голосов
/ 21 июня 2013

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

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

Чтобы временно разрешить это ..

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

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

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

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

После этого больше не должно отображаться сообщение об ошибке «Timeout Expired».

ура!

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