开发者

SSE 2005 stored Procedure working in management studio but not in C# DAL

I have created a stored procedure

CREATE PROCEDURE GetCustomerWiseSales(@StartDate nvarchar(10), @EndDate nvarchar(10))
AS

SELECT C.cCode, min(C.cName) as Customer, sum(P.BeerValue) as BeerValue, sum(P.RestGroup)as RestGroup
from Customers C
Join
(
SELECT     Sales.CustomerID, SUM(SalesLog.Quantity * SalesLog.Price) as BeerValue, 0 RestGroup
FROM         Sales INNER JOIN
                  SalesLog ON Sales.MemoNo = SalesLog.MemoNo
WHERE     (pGroup=8 and pSize>500) and Sales.Billdate>=@StartDate and Sales.Billdate<=@EndDate
group by  Sales.CustomerID

union all

SELECT     Sales.CustomerID, 0 BeerValue,SUM(SalesLog.Quantity * SalesLog.Price) AS RestGroup
FROM         Sales INNER JOIN
                  SalesLog ON Sales.MemoNo = SalesLog.MemoNo
WHERE     (pGroup!=8) and Sales.Billdate>=@StartDate and Sales.Billdate<=@EndDate
group by  Sales.CustomerID
)P
on P.CustomerID=C.cCode 
group by C.cCode

this SP is working nicely in Management Studio and outputs results before I blink my eyes. But when I added this SP in C# App through Data Access Layer and previewed Data using TableAdapter preview window, in first run it took 8-10 seconds to show data, in second run Preview windows threw Time Out exception. I also added a new TableAdapter with regular SQL to confirm this issues but regular SQL GetData function is working nicely.

I 开发者_如何转开发don't understand how a same procedure which is working nicely under same user-name and password in Management Studio, not working in DAL.

Any help would be appreciated.


You should capture an execution plan of the stored procedure running under the DAL and compare it to the one running under Management Studio express - you can do this using Sql Server Profiler.

Also make sure that you are running the stored procedure using exactly the same parameters (capture a trace of the procedure being executed from your DAL using Sql Server profiler and copy and paste the query into SQL server management studio)

Finally (this is a shot in the dark) you might want to try parameter masking your inputs as I have found it to have some effect in the past:

CREATE PROCEDURE GetCustomerWiseSales(@StartDate nvarchar(10), @EndDate nvarchar(10))
AS

DECLARE @MaskedStartDate NVARCHAR(10)
SET @MaskedStartDate = @StartDate
DECLARE @MaskedEndDate NVARCHAR(10)
SET @MaskedEndDate = @EndDate 

-- Rest of query with @StartDate replaced with @MaskedStartDate etc...

I've seen this make all the difference in certain situations.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜