我不确定这是 VB.NET 错误还是 SQL Server 错误。但我通过以下堆栈跟踪得到上述错误:
[SqlException(0x80131904):超时
已到期。超时时间已过
在操作完成之前
或者服务器没有响应。]
System.Data.SqlClient.SqlConnection.OnError(SqlException
异常,布尔中断连接)
+1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
异常,布尔中断连接)
+4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
状态对象)+194
System.Data.SqlClient.TdsParser.Run(RunBehavior
runBehavior、SqlCommand cmdHandler、
SqlDataReader数据流,
批量复制简单结果集
批量复制处理程序、TdsParserStateObject
状态对象)+2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
+33 System.Data.SqlClient.SqlDataReader.get_MetaData()
+83 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
ds,RunBehavior runBehavior,字符串
重置选项字符串)+297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior,
布尔返回流、布尔异步)
+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(数据集
数据集、DataTable[] 数据表、Int32
startRecord,Int32 maxRecords,字符串
srcTable、IDbCommand 命令、
CommandBehavior行为)+130
System.Data.Common.DbDataAdapter.Fill(数据集
数据集,Int32 开始记录,Int32
maxRecords,字符串 srcTable,
IDbCommand 命令、CommandBehavior
行为)+287
System.Data.Common.DbDataAdapter.Fill(数据集
数据集)+94
GlobalFunctions.GlobalF.GetComplaintTrendingList6(日期时间
第一个月,上个月日期时间,Int32
行级别)+489
ASP.website_complaints_complainttrendinglist6_aspx.Main()
在
e:\inetpub\amdmetrics-d.web.abbott.com\wwwroot\Website\Complaints\ComplaintTrendingList6.aspx:94
ASP.website_complaints_complainttrendinglist6_aspx.Page_Load(对象
发件人、EventArgs E) 中
e:\inetpub\amdmetrics-d.web.abbott.com\wwwroot\Website\Complaints\ComplaintTrendingList6.aspx:60
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr
fp、对象 o、对象 t、EventArgs e)
+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象
发送者、EventArgs e) +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