[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
) ALEFT 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", null, null, null, 1, null);
但是又出现了一个新的问题,跟踪调试的时候 报错如下
看到这样的报错我蒙了 ,首先本身这个存储过程的一些参数我是有默认值的,在调用的时候允许使用null进行赋值的 这里居然报了这样的错误
其次,不用强类型的dataset的时候 ,单独调用也是正确的,为什么使用了强类型的dataset后就出错了,实在是不知所措,估计是dataset对存储过程中临时表的处理问题,!这只是我的猜测,由于手头任务时间紧张,就贴出来烦请各位大神帮忙解决一下,分享一下大神的解决方法!真的很着急,请大神们快现身吧!!!!!!! ][/align]dataset存储过程临时表null
代码如下
--参数说明: @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
) ALEFT 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", null, null, null, 1, null);
但是又出现了一个新的问题,跟踪调试的时候 报错如下
看到这样的报错我蒙了 ,首先本身这个存储过程的一些参数我是有默认值的,在调用的时候允许使用null进行赋值的 这里居然报了这样的错误
其次,不用强类型的dataset的时候 ,单独调用也是正确的,为什么使用了强类型的dataset后就出错了,实在是不知所措,估计是dataset对存储过程中临时表的处理问题,!这只是我的猜测,由于手头任务时间紧张,就贴出来烦请各位大神帮忙解决一下,分享一下大神的解决方法!真的很着急,请大神们快现身吧!!!!!!! ][/align]dataset存储过程临时表null
你也可以考虑使用实体类集合,很多优秀的实体类辅助工具可以提高它的操作效率。
T_saleTableAdapter sale = new T_saleTableAdapter();
JXCManagement.DAL.DataSetSale ds = new JXCManagement.DAL.DataSetSale();
ds.EnforceConstraints = false;
T_saleTableAdapter.Fill(ds.T_saleDataTable, "2013-03-01", null, null, null, 1, null);
T_saleTableAdapter.Fill(ds.T_saleDataTable, "2013-03-01", null, null, null, 1, null);这样的操作的就报错 没有这样的调用形式,只有T_saleTableAdapter.Fill(T_saleDataTable)这样的调用,
然后我也试了一下用强类型dataset对象直接方法
T_saleTableAdapter sale = new T_saleTableAdapter();
JXCManagement.DAL.DataSetSale ds = new JXCManagement.DAL.DataSetSale();
ds.EnforceConstraints = false;
sale.Report_Month_Day("2013-03-01", null, null, null, 1, null);
还是报告同样的错误!求指教~~~
直接把这个存储过程从“服务器资源管理器”的“数据连接”里,拖动到Dataset.xsd,这样会生成Fill(DataSet1.uspGetManagerEmployeesDataTable, int employee_id)方法。对于你的架构,理应生成T_saleTableAdapter.Fill(ds.T_saleDataTable, "2013-03-01", null, null, null, 1, null)才对
刚才试了一些你说的方法 是正确的 可以得到正确的数据!!再次感谢你的热心帮助!!