读书人

关于DataSet 数据过大解决方案

发布时间: 2013-08-11 22:22:29 作者: rapoo

关于DataSet 数据过大

 Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("froExcel");
db.AddInParameter(cmd, "@condition", DbType.String, condition);
DataSet Ds = db.ExecuteDataSet(cmd);



数据库中直接执行存储过程"froExcel" 耗时在几十秒。数据为51列,20W行。
但是程序在设断点的时候
DataSet Ds = db.ExecuteDataSet(cmd)
执行到该句的时候 要等待很长很长时间。
1W多的数据 都要等待2分钟
5W多的数据 要等 近十分钟
20W 的话等了 好久好久也没有最终的结果。

最终获取到DataSet 是为了进行导出Excel的,其它代码都已经准备好,就是DataSet Ds = db.ExecuteDataSet(cmd)这里等待不回来结果。

不只到各位大神有什么办法,或者是有什么东西代替DataSet

DataSet? ExecuteDataSet
[解决办法]
DataReader 填充 DataTable
[解决办法]
引用:
DataReader 填充 DataTable


这样用还不如直接返回DataTable
[解决办法]
对存储过程实行分页,用哪个调哪个
http://wenku.baidu.com/view/78b778e9998fcc22bcd10d9d.html
[解决办法]
引用:
对存储过程实行分页,用哪个调哪个
http://wenku.baidu.com/view/78b778e9998fcc22bcd10d9d.html

支持,学习
[解决办法]
缓存DATASET!
[解决办法]
提醒LZ一点Excel一个工作表最大支持65536行。
[解决办法]

取数据建议按需取,别全加载。
[解决办法]
这个确实很烦人,导出的数据很多,DataTable效率很低。很容易死掉。

我遇到的问题更奇怪,遍历 DataTable 拼接 <table>的时候居然告诉我,连接超时,明明DataTable是关闭连接的。

最后只好告诉客户,分批导出吧。(幸好客户比较好说话)。

ps:拼接<table>比使用控件绑定,能够稍微快一点。


[解决办法]
数据量这么大~~还是分页吧。为啥要一次性都取出来呢?
[解决办法]
做分页,在sql里面写
[解决办法]
分页等一些方法都没用,只能时间更长,因为要的是所有数据。
别设置断点呢,设置断点和直接执行是不一样的。
excel2007 最多1048576行。
[解决办法]
分批去读取吧
[解决办法]
分页关于DataSet 数据过大解决方案
[解决办法]
我也遇到过差不多的问题 最后也是采用分页的方式去做的 归结于SQL查询时间过长 貌似是程序的保护机制启动了 然后就报错了
[解决办法]
获取数据应该是有节制的 。如果你sql语句写的足够好 ,配置足够强 ,那么可以相应的取足够多的数据 。如果不是的话 ,用多少取多少 。
[解决办法]
数据量这么大一次取出来吃不消,还是分页,按需要取吧
[解决办法]
你要先测试出那部分慢,是数据库查询慢,还是加载的内存慢。
另外,分页是必须,可以提高查询效率,而且防止内存溢出。
[解决办法]
不要一次性把所有数据都取出来,可以先把业务划分一下,按需所取。

还有,比如导出excel报表,你可以把导出过的报表(比如某个年月的)存储到文件夹下,下次取数据的时候可以先去数据库中查询对应年月的报表是否已经生成过,有就不在此读取,直接下载路径文件即可。

读书人网 >asp.net

热点推荐