将格式化字符串和实际参数传递给C#中的存储过程

时间:2017-03-30 08:33:34

标签: c# sql-server entity-framework asp.net-mvc-4 stored-procedures

我按如下方式执行存储过程:

exec SALESREPORTFORWEB 
         @StartDate = '03/20/2017', @EndDate = '03/21/2017'

存储过程

CREATE proc [dbo].[SALESREPORTFORWEB]
--SALESREPORTFORWEB @StartDate='03-20-2017' ,@EndDate='03-28-2017',@usercode in ('2739','1609')

@StartDate DATETIME =NULL ,
@EndDate DATETIME =NULL ,
@ITEMCODE VARCHAR(100)=NULL,
@ITEMDESCRIPTION VARCHAR(100)=NULL,
@CLIENTCODE Varchar(25) = null,
@CLIENTNAME VARCHAR(100)=NULL,
@CLIENTBRANCHCODE VARCHAR(100)=NULL,
@CLIENTBRANCHNAME VARCHAR(100)=NULL,
@BRANDCODE VARCHAR (25)=NULL,
@BRANDNAME VARCHAR(100)=NULL,
@USERCODE VARCHAR(25)=NULL,
@USERNAME VARCHAR(100)=NULL,
@SUBCHANNEL VARCHAR(25)=NULL
AS


SELECT  H.UserCode,U.SALESMANNAME, CONVERT(CHAR(10), H.TrxDate, 103) AS DATE,D.ItemCode,I.Description AS ITEMDESCRIPTION,d.ItemGroupLevel5 AS BRANDCODE,
B.Description AS BRANDNAME,
 H.ClientCode,             
C1.Description AS Client,H.ClientBranchCode,C2.Description, C2.SubChannelCode AS BRANCHSUBCHANNEL, 

ROUND(                                
SUM(                                    
CASE WHEN D.QuantityLevel1 > 0 THEN                                    
D.QuantityLevel1 * PriceUsedLevel1                                    
ELSE                                    
D.QuantityLevel3 * PriceUsedLevel3                                    
END - ISNULL(D.TotalDiscountAmount, 0)                                    
), 2) AS TrxAmount,SUM(D.QuantityBU) AS QTY            
FROM tblTrxHeader H INNER JOIN                      
tblTrxDetail D ON H.TrxCode = D.TrxCode AND D.TrxStatus > 0  INNER JOIN
tblBrand  B ON B.Code=D.ITEMGROUPLEVEL5 INNER JOIN                 
tblClient C1 ON H.ClientCode = C1.Code
INNER JOIN tblClient C2 ON H.ClientBranchCode=C2.Code
INNER JOIN TBLITEM I ON I.ITEMCODE=D.ITEMCODE 
/*LEFT OUTER JOIN                
tblRegion R ON R.Code = C.RegionCode*/ LEFT OUTER JOIN                  
vw_UnitManagers U ON U.SalesmanCode = H.UserCode                  
WHERE  
H.TrxType IN (1) AND
DATEDIFF(dd,H.TrxDate,ISNULL(@StartDate,GETDATE())) <= 0 AND DATEDIFF(dd,H.TrxDate,ISNULL(@EndDate,GETDATE())) >= 0 AND
D.ITEMCODE= ISNULL(@ITEMCODE,D.ITEMCODE) AND
H.CLIENTCODE= ISNULL(@CLIENTCODE,H.CLIENTCODE)AND 
H.ClientBranchCode=ISNULL(@CLIENTBRANCHCODE,H.ClientBranchCode) AND
D.ItemGroupLevel5=ISNULL(@BRANDCODE,D.ItemGroupLevel5)AND
H.UserCode in (ISNULL(@USERCODE,H.UserCode)) AND
C2.SubChannelCode=ISNULL(@SUBCHANNEL,C2.SubChannelCode)AND
B.Description LIKE('%'+ISNULL(@BRANDNAME,B.Description)+'%')AND 
I.Description LIKE('%'+ISNULL(@ITEMDESCRIPTION,I.Description)+'%')AND 
C1.Description LIKE('%'+ISNULL(@CLIENTNAME,C1.Description)+'%')AND 
C2.Description LIKE('%'+ISNULL(@CLIENTBRANCHNAME,C2.Description)+'%')AND 
U.SalesmanName LIKE('%'+ISNULL(@USERNAME,U.SalesmanName)+'%') 


GROUP BY 
--CONVERT(VARCHAR, H.TrxDate, 101),                  
 H.UserCode,U.SALESMANNAME,H.TRXDATE,D.itemcode,I.Description,d.ItemGroupLevel5,
B.Description, H.ClientCode,C1.Description,H.ClientBranchCode,C2.Description, C2.SubChannelCode
ORDER BY H.TrxDate 

其中@StartDate = '03/20/2017'@EndDate = '03/21/2017'是存储过程的参数。

在我的代码中,它的外观如下:

var salesDataQuery = SalesDataModel.FromSql("exec SALESREPORTFORWEB '@StartDate='@StartDate, '@EndData='@EndData",
                new SqlParameter("@StartDate", startdate),
                new SqlParameter("@EndData", enddate));

但是这段代码会抛出一个错误:

  

&#39; @StartDate =&#39;

附近的语法错误无效

有人可以帮我做正确的存储过程调用吗?

非常感谢!

1 个答案:

答案 0 :(得分:-1)

如何从这样的exec中裁剪参数:

var salesDataQuery = SalesDataModel.FromSql("exec SALESREPORTFORWEB @StartDate, @EndDate",
                new SqlParameter("@StartDate", startdate),
                new SqlParameter("@EndData", enddate));

编辑:为过程添加参数。