超时过期.操作完成前的超时时间或服务器没有响应



我不确定这是否是一个VB。. NET错误或SQL Server。但是我得到了上面的错误与以下堆栈跟踪:

[SqlException (0x80131904): Timeout .过期了。超时时间已过在操作完成之前或者服务器没有响应[br>System.Data.SqlClient.SqlConnection.OnError (SqlException异常异常,布尔值+ 1950890 System.Data.SqlClient.SqlInternalConnection.OnError (SqlException异常异常,布尔值+ 4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObjectstateObj) + 194
System.Data.SqlClient.TdsParser.Run (RunBehaviorrunBehavior, SqlCommand, cmdHandler,SqlDataReader dataStream数据,BulkCopySimpleResultSetbulkCopyHandler, TdsParserStateObjectstateObj) + 2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData ()+ 33 System.Data.SqlClient.SqlDataReader.get_MetaData ()+ 83 System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReaderRunBehavior,字符串resetOptionsString) + 297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehaviorRunBehavior;布尔返回流,布尔异步+ 954 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehaviorRunBehavior;返回String方法;DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehaviorRunBehavior;布尔返回流,字符串方法)+ 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(数据集dataset, DataTable[] DataTable, Int32startRecord, Int32 maxRecords,字符串srcTable, IDbCommand命令,CommandBehavior行为)+130
System.Data.Common.DbDataAdapter.Fill(数据集dataSet, Int32, startRecord, Int32maxRecords, String srcTable,IDbCommand命令,CommandBehavior行为)+ 287
System.Data.Common.DbDataAdapter.Fill(数据集数据集)+ 94
GlobalFunctions.GlobalF.GetComplaintTrendingList6 (DateTimeFirstMonth, DateTime LastMonth, Int32rowLevel) + 489
ASP.website_complaints_complainttrendinglist6_aspx.Main ()在e: inetpub wwwroot amdmetrics-d.web.abbott.com网站 ComplaintTrendingList6.aspx投诉:94ASP.website_complaints_complainttrendinglist6_aspx.Page_Load(对象Sender, EventArgs E) ine: inetpub wwwroot amdmetrics-d.web.abbott.com网站投诉 ComplaintTrendingList6.aspx: 60System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr对象0,对象t, EventArgs e)+ 14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象sender, EventArgs e) +35
System.Web.UI.Control.OnLoad (EventArgse) + 99
System.Web.UI.Control.LoadRecursive ()+ 50 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) + 627

这是在Microsoft .NET框架版本: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

数据适配器的select命令需要增加命令超时时间

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

adapter.SelectCommand.CommandTimeout = 0;

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

定义如下:从MSDN

获取在尝试建立连接时等待的时间终止尝试并生成错误。

设置连接超时。从MSDN

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

所有超时默认值为30秒

我认为这意味着数据库操作时间太长,它放弃了。

尝试在web.config

中添加连接超时
<add key="DBConnection" value="server=LocalHost;uid=sa;pwd=;database=DataBaseName;Connect Timeout=200; pooling='true'; Max Pool Size=200"/>

使用查询分析器(现在称为SSMS)得到的结果和应用程序得到的结果可能非常不同,这主要是由于参数嗅探。

我建议阅读Erland Sommarskog的这篇文章以获得详细信息。

" . .数据库操作时间太长而放弃。"

这是正确的。当与服务器的连接发生冲突时,会发生这种情况。

暂时解决…

"修复你的局域网连接"

你可以右键单击你的连接,点击"REPAIR"

永久解决…

在你的工作组中不应该有静态和动态ip地址的组合。如果要设置静态组,则不要包含动态连接,反之亦然。

在此之后,应该不会再显示"Timeout Expired"错误了。

干杯!

相关内容

  • 没有找到相关文章

最新更新