C#中存储过程的超时错误

时间:2015-05-05 12:38:59

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

我有这个存储过程来从数据库中恢复数据(动态查询)。我从c#codebehind调用这个存储过程,我将两个参数从c#传递给这个存储过程。

alter procedure [dbo].[GetCompleteCPTDetails]
    @Practice_Short_Name varchar(50),
    @Uploaded_Date nvarchar(max)
as
begin
DECLARE @CPTtablename nvarchar(300)
DECLARE @vQuery NVARCHAR(max)
DECLARE @upldate nvarchar(100)
set @upldate = @Uploaded_Date
set @CPTtablename ='ACER_CLAIMS_MASTER_DETAIL_Hist_'+@Practice_Short_Name
SET @vQuery = 'select Practice_Short_Name,Service_Date_From,Carrier_Name,
   Location_Description,Patient_Number,Patient_First_Name,
   Patient_Last_Name,Voucher_Number,Procedure_Code,Service_Fees,
   Service_Payments,Service_Adjustments,Acer_Status,Acer_Allowed_Amount
   from ' +@CPTtablename+' 
   where Uploaded_Date =''' + @upldate + ''' 
   order by acer_status asc, Service_Date_From desc, Patient_First_Name asc'
EXEC (@vQuery)

end
GO

但是当我运行此查询时,它给了我TimeOut错误。但是,如果我在SP中为我的参数赋值,并从查询窗口运行SP,那么它显示正确的数据。

如果我从C#codebehind调用它,请解释我为什么会发出超时错误。

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的地方和顺序。
除非那只是一张没有索引的大表,应该很快 Uploaded_Date上是否有索引,是否没有碎片 此外,排序索引也会有所帮助。

您是否正在将所有内容加载到DataTable中? 如果是这样,请尝试加载到DataReader中。

尝试前1并删除订单。
如果没有返回,那么您有连接问题,因为查询不应该超时。

要尝试的另一件事是(没有锁定)以查看它是否是锁定问题。

为什么@Uploaded_Date nvarchar(max)?
这是约会吗?

答案 1 :(得分:-1)

这个问题可以有很多解决方案,因为问题区域在每种情况下都可能不同。

但最常见的是:

  1. 检查&在应用程序中增加sqlcommand超时
  2. 尝试异步调用此
  3. 另外我想知道,您的应用程序位于DB所在的同一台机器上?