我不确定这是否是一个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"错误了。
干杯!