andydainumber1 发表于 2013-4-2 17:02:00

VSReport8Lib.VSReport加载大数据量报错

--code
VSReport8Lib.VSReport vsr = new VSReport8Lib.VSReport();
vsr.Load(filepath, reportName);
--

使用VSReport8Lib.VSReport显示报表数据时,当数据量较大时,提示“函数计算超时”,执行结束后报错并且不显示数据。
希望帮忙分析报错原因。

另外,VSReport有没有默认超时时间,如果有,是多少呢?
以下是示例demo程序和库:




在demo中,我们初步估计,默认超时时间为1分钟左右。
上次咨询过,你们说没有超时时间的设置,那么为什么到了一定时间会弹出报错提示,而直接查询可以正常出数据呢?希望帮忙解答该疑问。

--补充:
最后抛出异常是在显示报表数据的这个方法RenderToFile()上:
vsr.Load(filepath, reportName);
vsr.DataSource.ConnectionString = xmlCon;
vsr.DataSource.RecordSource = xmlSql;
string vpfile = Server.MapPath("~/ReportFile/Reprot" + userId + ".gif");
vsr.RenderToFile(vpfile, VSReport8Lib.FileFormatSettings.vsrVSPrinter);

ZenosZeng 发表于 2013-4-2 18:27:00

Demo已经收到,我这边先测试以下。

andydainumber1 发表于 2013-4-3 08:56:00

回复 2楼dof的帖子

好的,多谢

ZenosZeng 发表于 2013-4-3 18:00:00

andydainumber1 你好

我查看了你的工程,设置为 waitfor delay '00:01:01'或者更大值就会出现异常,VSReport 本身没有提供设置超时的选项,现在可以做的是修改取的数据量,和修改你的存储过程。

andydainumber1 发表于 2013-4-7 09:07:00

回复 4楼dof的帖子

如果这样,那不是所有查询时间超过1分钟的报表,都会报错吗?有的存储过程已经最优了,而且客户需要查询的数据量也没法去限制的。根据你们的经验,有没有其他的方案建议呢?

ZenosZeng 发表于 2013-4-7 16:19:00

通常情况需要通过分页来控制用户每次查询的数据量,比如每次查询1000条。

andydainumber1 发表于 2013-4-7 16:37:00

回复 6楼dof的帖子

查询结果显示都是分页显示的,根据行高,每页30条数据左右,但是这个方法vsr.RenderToFile显示大数据量的时候,还是会报错;另外,每次查询数据量不好控制,一般客户根据日前范围等条件查询的。

ZenosZeng 发表于 2013-4-8 17:43:00

andydainumber1 你好

你可以采用报表的分批显示,比如这次用户查询总共会显示1000页报表,然后你可以以100或者200页为单位取数据,这样来避免程序超时。

andydainumber1 发表于 2013-4-9 11:49:00

回复 8楼dof的帖子

嗯,好的,我朝这个方向考虑一下,多谢了:hjyzw:
这两天我们也找到一种解决方案,还在完善中.
VSReport8Lib.VSReport vsr = new VSReport8Lib.VSReport();
vsr.RenderToFile(...)
....
我们发现主要是RenderToFile方法会超时,我们就把查询的结果集放到一张临时表中存储,显示的时候的数据源只是这个临时表,这样就缩短了显示查询的时间,把时间转移到前面,显示的时候就不会超时了。

ZenosZeng 发表于 2013-4-10 10:56:00

很好的性能提升方案。:hjyzw:
页: [1]
查看完整版本: VSReport8Lib.VSReport加载大数据量报错