超时过期。操作完成之前超时时间已过或服务器没有响应

问题描述:

我不确定这是VB.NET错误还是SQL Server。但我得到以下堆栈跟踪错误:超时过期。操作完成之前超时时间已过或服务器没有响应

[SqlException(0x80131904):超时 已过期。超时时间已过 之前的操作 完成或服务器未响应。]
System.Data.SqlClient.SqlConnection.OnError(SQLEXCEPTION 例外,布尔breakConnection) 1950890 System.Data.SqlClient.SqlInternalConnection。的OnError(SQLEXCEPTION 例外,布尔breakConnection) 4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)+194
System.Data.SqlClient.TdsParser.Run(runBehavior runBehavior,SqlCommand的cmdHandler, SqlDataReader的数据流, 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,字符串 resetOptionsString)297个
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior, 布尔returnStream,布尔异步) 954 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior,RunBehavior runBehavior, 布尔returnStream,字符串方法, DbAsyncResult结果)162
System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior, 布尔returnStream,字符串方法) 32 System.Data.SqlClient.SqlCommand.ExecuteReader (的CommandBehavior 行为,字符串方法)141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior 行为)12
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(的CommandBehavior 行为) +10
System.Data.Common.DbDataAdapter.FillInternal(Data设置 数据集,数据表[]数据表,的Int32 startRecord,的Int32最大记录,字符串 srcTable要,IDbCommand的命令, 的CommandBehavior行为)130
System.Data.Common.DbDataAdapter.Fill(数据集 数据集的Int32 startRecord,的Int32 最大记录,字符串srcTable要, IDbCommand的命令,的CommandBehavior 行为)287
System.Data.Common.DbDataAdapter.Fill(数据集 数据集)94
GlobalFunctions.GlobalF.GetComplaintTrendingList6(DateTime的 FirstMonth,日期时间LastMonth,的Int32 rowLeve升)489
ASP.website_complaints_complainttrendinglist6_aspx.Main() 在 E:\的Inetpub \ amdmetrics-d.web.abbott.com \ wwwroot的\网站\投诉\ ComplaintTrendingList6.aspx:94 ASP.website_complaints_complainttrendinglist6_aspx。的Page_Load(对象 发件人,EventArgs的E)在 E:\的Inetpub \ amdmetrics-d.web.abbott.com \ wwwroot的\网站\投诉\ ComplaintTrendingList6.aspx:60 错误帮助(IntPtr的 FP,对象O,对象吨,EventArgs的) 14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象 发件人,EventArgs的)35
System.Web.UI.Control.OnLoad(EventArgs的 E)+ 99
System.Web.UI.Control.LoadRecursive() 50 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 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) 

我可以运行在查询分析器这个存储过程,并在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 

你得到什么用查询分析器(或SSMS,这些天),哪些是你的应用程序获取可以是非常不同的东西,主要是由于参数嗅探。

我建议阅读Erland Sommarskog的this article了解详情。

我相信这意味着数据库操作耗时太久而且放弃了。

尝试在web.config中添加一个连接超时

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

Rob,如果这个存储过程只需要8秒钟在QA中运行,你是否认为它会超时默认的超时设置? – salvationishere 2011-05-03 19:45:10

您需要增加dataadapter的select命令的命令超时。

以下是增加dataadapter命令超时的代码。

adapter.SelectCommand.CommandTimeout = 0; 

SQL连接超时时间与执行的命令的超时时间不同。

它定义如下。 从MSDN

获取时间等待,而试图建立终止尝试并生成错误之前 的连接。

在设置连接超时时..从MSDN

您可以设置时间的等待连接使用 的ConnectTimeout或连接超时关键字在连接字符串 超时量。值为0表示没有限制,并且应该在连接字符串 中避免,因为连接尝试无限期地等待。

所有超时的默认值是30秒。

“..数据库操作耗时过长,放弃了。”

这是正确的。这发生在与服务器的连接有冲突时。

要暂时解决这个..

“修复您的局域网连接”

您可以通过右键单击您的连接,单击在做这个“修复”

要永久解决这个..

工作组中不应该包含静态和动态IP地址的组合。如果你想设置一个静态组,不要包含动态连接 - 反之亦然。

之后,不应该有一个错误显示“超时过期”了。

干杯!