首页新闻找找看学习计划

百万数据如何存放到Datatable中

0
悬赏园豆:50 [已解决问题] 解决于 2012-07-23 10:23

现有百万级数据,需要从数据库中读取然后插入到Datatable中, 目前使用了两种方法都不行;一:用DataReader读取,然后循环插入。失败:在数据库中查询可以查询出来,但是  MySqlDataReader datareader = cmd_local.ExecuteReader();  datareader.reader()时候,返回false;

二:MySqlDataAdapter.Fill()方法,貌似MysqlDataAdapter填充有上限要求,百万级别数据,他只是微微一笑,然后弄个空白的DataTable出来。

求助大侠,是否有更好的方法解决。我穷的就剩下园豆了,答案如可行,加豆,那都是“币需的”!

大家都懂的。

望回复

-Stephen的主页 -Stephen | 菜鸟二级 | 园豆:462
提问于:2012-07-20 17:17
< >
分享
最佳答案
1

不知道你为什么要把百万条记录提到页面上,我想应该可以避免,至于超时,我想试因为你的数据量太大,当web服务器返回你的请求时,对你的数据时要进行格 式化的,这个过程会很漫长,所以建议你:如果要对百万条记录进行数据分析运算,一定要利用后台存储过程(不用说b/s,c/s也是如此),如果要查询,可 以考虑分期显示,例如分页,这个操作就很简单了,可以搜索一下

收获园豆:10
Tom.汤 | 小虾三级 |园豆:1645 | 2012-07-21 08:09
其他回答(6)
1

用mysql "Limit" 关键字,每次只读一部分,分步处理。

如同分页原理。。。

收获园豆:10
cotopboy | 园豆:229 (菜鸟二级) | 2012-07-20 17:29
1

建议批量读,比如每次读100条

收获园豆:10
dudu | 园豆:39678 (高人七级) | 2012-07-20 17:32

dudu,谢谢光临.分批跟我现在的方式一样了, 循环读取数据,每次读取一部分。  但是在传递数据的时候,有很多筛选动作  比如:123334, 以一次取123(第一个3)4, 第二次取123(最后一个3)4, 分批会遇到这种问题,第一次传递123,第二次传递334. 这样就会造成数据丢失,或者筛选有误。

支持(0) 反对(0) -Stephen | 园豆:462 (菜鸟二级) | 2012-07-20 17:55

@Stephen.kang: 在读之前你先获取总共有多少条记录,然后通过while循环不停地分页读取并插入到datatable中,如:

int total = GetTotal(sql);
int pageSize = 1000;
int pageNo = 0;
while(pageSize * pageNo < total){
  //分页去取输入并插入到datatable中
  ……
  pageNo++;
}

支持(0) 反对(0) psforever | 园豆:461 (菜鸟二级) | 2012-07-21 01:26

@psforever: 哈哈, 弄来弄去又回到远点了,我最早的方式就是这种方法, while循环,直到数据库中标识字段全部更新后跳出循环。 ok,我自己在研究研究,谢谢各位

支持(0) 反对(0) -Stephen | 园豆:462 (菜鸟二级) | 2012-07-21 09:43
0

貌似放到datatable不是理智的做法,查询效率提不上去,放dictionary都比datatable好。

收获园豆:5
一线码农 | 园豆:213 (菜鸟二级) | 2012-07-20 17:41
0

Limit

收获园豆:5
CrazyJinn | 园豆:799 (小虾三级) | 2012-07-20 17:49
0

搞一个分页存储过程!!!

收获园豆:5
Angkor--:-- | 园豆:1082 (小虾三级) | 2012-07-20 18:05
1

http://www.cnblogs.com/powertoolsteam/archive/2012/07/18/2597600.html

你问问他,他的MultiRow能够实现"百万行数据绑定下平滑滚动",他能够显示百万,肯定有试过怎么读出百万。

收获园豆:5
Launcher | 园豆:45040 (高人七级) | 2012-07-20 18:12

好的,我去摆放一下,谢谢

支持(0) 反对(0) -Stephen | 园豆:462 (菜鸟二级) | 2012-07-20 18:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册