.net如何从一个数据库向另一个数据库插入大量数据

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:34:58
List<ClassRoomWeekNum> lcrwn = new ClassRoomWeekNumBLL().getBroadRoomWeek();
//这是从一个数据库的一个表中取出一周的数据
foreach (ClassRoomWeekNum cr in lcrwn)
{
new ClassRoomWeekNumBLL().addClassRoomWeek(cr);
}
//然后插入另一个数据库的表中
这是两个数据库的两个表 两个表的结构相同
我试了一下 插入几小时的数据量在几十条,插入没问题 ,但是要是一周的数据大概是四五千条的样子,要在查出数据的同时 在写入另一个数据库 这样有时会成功 很少 但要等上十几或几十分钟的才成功,现在的现象是基本上全是服务器超时,而导致失败 最终网页打不开
请问怎样才能解决插入大量数据 而不产生超时现象
这个问题困扰我很长时间了 请大家帮忙想想办法 谢谢了

首先,我说的只是建议,不是批评你
1.处理大数据不能用你这种方法,频繁的数据和对象转换是不必要的
2.大数据转移可以用存储过程完成,在台后完成,不要像你这种通过前台
3.大数据不宜用List<ClassRoomWeekNum> 对象泛型
4.如果一定要在前台处理,可以用DataTable,DataRow,不要转换为ClassRoomWeekNum

------------------------
最快处理用存储过程,在后台直接转移数据了

如不明白加百度群: 1231298

foreach里竟然敢new BLL??
你这样做比用ORM还要浪费资源!!

ClassRoomWeekNumBLL bll = new ClassRoomWeekNumBLL();
foreach (ClassRoomWeekNum cr in lcrwn)
{
bll.addClassRoomWeek(cr);
}

不知道你的DAL又是如何写的,少实例化对象。

准备SQL插入的语句写好,直接写到文本里。每行一条SQL语句,insert.sql

然后复制到数据库那端,直接执行SQL。(你在程序里运行也可以的,也可以先读取前N行,开个线程可以控制速度)

chinekm,我10000000个new都没问题。

服务器超时是网络原因

使用 异步 或 多线程 执行 执行的时候分批插入 不要一下都插入
执行期间其他功能依然可以执行 不受影响

肯定不能一条一条循环插入,那样会频繁的开发连接关闭连接,拼成sql一次性插入,或者用存储过程循环插入。或者把数据导出成文本格式利用数据库的DTS对象导入