你能追踪Timeout过期错误的来源吗?

时间:2014-06-27 13:53:05

标签: c# asp.net sql-server stored-procedures

我有两个相同的sql server数据库 - staging(版本10.0.4000.0)和测试(10.0.2531.0)。
我有一个调用这些数据库的Visual Studio 2008 ASP.Net,C#项目。该项目使用.xsd从存储过程返回数据。

这个项目有100多个存储过程,一切都很好。但是,我最近创建了一个存储过程,它给了我一些问题。存储过程在QA的两个数据库中运行。当我为xsd创建表adpater并将其连接到测试数据库时,它会按预期运行。当我更改连接到登台数据库时,我收到此错误:

  

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

该过程需要两个日期参数。如果我删除日期参数,则错误消失,我得到预期的结果集。如果我输入一个伪造的字符串或整数参数,它也会运行。但是如果我需要日期,则会发生超时错误。请记住,存储过程在测试和分段中是相同的,并且在QA中运行时都返回结果(在3秒内)。我只是点击tableadapter并选择预览数据选项,所以我知道这不会是我的演示代码中的一些错误。

我不确定提供什么代码或可能有助于解决此问题的代码。请告诉我哪些细节可能会有所帮助,我可以提供。

更新: 以下是从Visual Studio返回的完整消息:

  

MW.MWDeptTotalSpend.Fill,GetData(@StartPYMNT_DT,@ EndPYMNT_DT)可以   不能预览。

     

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

更新2:

我在我的细节上做了一些小改动,可能会给你一些见解。

WHERE X.PYMNT_DT BETWEEN '1/1/2014' and '5/1/2014' --@StartPYMNT_DT AND @EndPYMNT_DT

注释参数定义为@StartPYMNT_DT smalldatetime,@ EndPYMNT_DT smalldatetime

该过程现在返回数据,但显然我想传递我的日期参数。

1 个答案:

答案 0 :(得分:0)

我找到了一个“解决方案”。出于某种原因,我不得不将日期时间参数作为日期时间转换为sql:

X.PYMNT_DT BETWEEN CAST(@StartPYMNT_DT as smalldatetime) AND CAST(@EndPYMNT_DT  as smalldatetime)

我仍然想知道如何追踪这些错误的来源,显然这个解决方案是一个黑客攻击。如果有人可以提供,我愿意接受更好的答案。