日期:2014-05-17  浏览次数:20745 次

强类型dataset中使用存储过程的问题!!!急急急!!
[align=center]首先数据库中有一个经过验证正确的存储过程
代码如下 
--参数说明: @date 是传入的时间 如果对某年的一个月份进行统计  则该月份的第一天日期一‘2013-03-01’这样形式传入即可
--         @costumeID 是客户的ID  对相应的客户进行月报表的详细统计 如果参数为null 则对这个月份的所有客户进行月报表的详细统计
CREATE proc p_Report_Month_Day 
@date nvarchar(10),
@pruductID bigint=null,
@addressID bigint=null,
@providerID bigint =null,
@costumeID bigint=null ,
@employeeID bigint=null


as
set nocount on 
SELECT  ID,  DATEADD(DAY,ID-1,@date) AS 日期,ISNULL(销售总价,0) AS 总价 
FROM 
(
SELECT ID=ROW_NUMBER() OVER (ORDER BY GETDATE()) FROM sysobjects
) A

LEFT JOIN
 (
SELECT   saleDate,sum(total) 销售总价
FROM T_sale 
where 
    ( @pruductID is null or productID=@pruductID)--品名
AND ( @addressID is null or addressID=@addressID)--产地
AND ( @providerID is null or providerID=@providerID)--供应商
AND ( @costumeID is null or costumeID=@costumeID)--客户
AND ( @employeeID is null or employeeID=@employeeID)--员工

GROUP BY   saleDate
 
 ) B
ON CONVERT(VARCHAR(10),DATEADD(DAY,ID-1,@date),120)=saledate
WHERE DATEDIFF(MONTH,@date,DATEADD(DAY,ID-1,@date))=0


在数据库的新建查询中 调用存储过程
可以得到正确的结果
exec p_Report_Month_Day '2013-03-01',null,null,null,1,null

 ID          日期          总价
1 2013-03-01 00:00:00.000 1600
2 2013-03-02 00:00:00.000 0
3 2013-03-03 00:00:00.000 0
4 2013-03-04 00:00:00.000 0
5 2013-03-05 00:00:00.000 0
6 2013-03-06 00:00:00.000 0
7 2013-03-07 00:00:00.000 0
8 2013-03-08 00:00:00.000 0
9 2013-03-09 00:00:00.000 0
10 2013-03-10 00:00:00.000 0
11 2013-03-11 00:00:00.000 6400
12 2013-03-12 00:00:00.000 0
13 2013-03-13 00:00:00.000 0
14 2013-03-14 00:00:00.000 0
15 2013-03-15 00:00:00.000 0
16 2013-03-16 00:00:00.000 0
17 2013-03-17 00:00:00.000 0
18 2013-03-18 00:00:00.000 0
19 2013-03-19 00:00:00.000 0
20 2013-03-20 00:00:00.000 0
21 2013-03-21 00:00:00.000 14400
22 2013-03-22 00:00:00.000 0
23 2013-03-23 00:00:00.000 0
24 2013-03-24 00:00:00.000 0
25 2013-03-25 00:00:00.000 0
26 2013-03-26 00:00:00.000 0
27 2013-03-27 00:00:00.000 0
28 2013-03-28 00:00:00.000 0
29 2013-03-29 00:00:00.000 0
30 2013-03-30 00:00:00.000 0
31 2013-03-31 00:00:00.000 0

可以肯定的是 结果是对的 而且功能也是我想要的!
但是在强类型dataset中使用这个存储过程的时候  出现了问题
首先提示这样的错误


于是我把存储过程中的ID字段去掉了 上面的这个问题也就解决了

在程序中我就简单的这样调用了
 T_saleTableAdapter sale = new T_saleTableAdapter();
            JXCManagement.DAL.DataSetSale.T_saleDataTable data=null;
             data= sale.Report_Month_Day("2013-03-01", n