C#调用mysql使用MySqlDataReader 在处理数据时while 循环里没反应了

happy819 2017-12-28 02:00:34
我是在debug模式下试的,取出来的数据有接近200万行,实验了多次,有时候能处理完,有时候程序直接停那了,也没有抛出异常,没有走到程序的末尾,流程里就这一个循环。程序刚开始跑的时候在循环里下断能断住,过一会再下断就断不住了,不知道这么回事。
            
mysqlStr = "select id, classid,name from dbm";
MySqlCommand cmd = new MySqlCommand(mysqlStr, connection);
cmd.CommandTimeout = 3600;
connection.Open();
MySqlDataReader rdr = cmd.ExecuteReader();
List<InfoOBJ> infoList = new List<InfoOBJ>();
int mm = 0;
while (rdr.Read())//
{
mm++;
if (mm > 1000000)
{
int kk = 3;
}
inforID = rdr["id"].ToString();
inforClassid = rdr["classid"].ToString();
inforName = rdr["name"].ToString();
InfoOBJ info = new InfoOBJ(inforID, inforClassid, inforYoubian);
infoList.Add(info);
}
...全文
1146 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy819 2017-12-28
  • 打赏
  • 举报
回复
谢谢大家的关注,试了多次发现我是在远程连接web服务器的数据库,可能是网络的问题,程序放到服务器上跑就正常了
xuzuning 2017-12-28
  • 打赏
  • 举报
回复
200 万行处理起来要很长时间 而且你还要缓存数据,内存够用吗? 建议增加 limit 子句,分段直接运行,而不是调试模式
  • 打赏
  • 举报
回复
不能通过数据库直接update么?非要读取出来修改?
happy819 2017-12-28
  • 打赏
  • 举报
回复
引用 4 楼 From_TaiWan 的回复:
不是断不住,是此时程序已经死了,估计此时,操作系统正在调度已经拥挤不堪的各个进程呢
我在while里每处理10万行数据sleep 2秒,试了几次好像就行了。
happy819 2017-12-28
  • 打赏
  • 举报
回复
我要取出来重新修改一些字段,所以要全部取出来
引用 2 楼 starfd 的回复:
你什么需求要把全部数据取出来?真必须要全取,那也分页分几次取啊,估计你这个是死锁之类的卡死了
是操作系统的问题吗?进程处理不过来了?
秋的红果实 2017-12-28
  • 打赏
  • 举报
回复
不是断不住,是此时程序已经死了,估计此时,操作系统正在调度已经拥挤不堪的各个进程呢
秋的红果实 2017-12-28
  • 打赏
  • 举报
回复
200万行,都读取出来有什么用?谁能看得完 根据用户的需要,或者说符合某些条件读取的数据,才是有意义的 给select id, classid,name  from dbm加上where吧
  • 打赏
  • 举报
回复
你什么需求要把全部数据取出来?真必须要全取,那也分页分几次取啊,估计你这个是死锁之类的卡死了
happy819 2017-12-28
  • 打赏
  • 举报
回复
代码里有一行参数错误是我贴的时候没改全,源程序是没问题的:InfoOBJ info = new InfoOBJ(inforID, inforClassid, inforYoubian);

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧