首页新闻找找看学习计划

SqlBulkCopy 上传几百万级数据总是报超时,怎么办?

0
悬赏园豆:5 [已解决问题] 解决于 2014-02-26 14:06

用SqlBulkCopy 方法一次上传几百万条数据,总是报超时,怎么办?

本人已经把BulkCopyTimeout这个时间设的很长了(设为几十分钟),但还是几十秒就报超时。

 

大家有没有遇到过这样的问题?

请给点建议?

Albert Fei的主页 Albert Fei | 老鸟四级 | 园豆:2102
提问于:2014-02-20 16:11
< >
分享
最佳答案
1
收获园豆:2
Launcher | 高人七级 |园豆:45040 | 2014-02-20 16:18

本人已经把BulkCopyTimeout这个时间设的很长了

Albert Fei | 园豆:2102 (老鸟四级) | 2014-02-20 17:01

@Albert Fei: 示例代码演示了 BulkCopyTimeout 属性的使用,说明这个属性是启作用的。你的不启作用,是不是你的代码跟示例代码不同?超时应该是通过异常的方式抛出,不知道这个异常的详细信息是什么?

Launcher | 园豆:45040 (高人七级) | 2014-02-20 17:07

@Albert Fei: 楼上说的有道理,把 异常的详细信息贴出来也许能判断是哪里超时,可能超时的地方很多,如果是asp.net,web请求也可能超时。

C#开发人员 | 园豆:181 (初学一级) | 2014-02-21 13:17

@C#开发人员: 是的,你们说的都有道理,是数据库的执行超时,我以为是BulkCopyTimeout没有起作用!

因为我也在程序中设置了数据库的连接超时(connect timeout)和sqlcommand执行超时.

后来我直接在数据库里改掉了,就好了。

Albert Fei | 园豆:2102 (老鸟四级) | 2014-02-26 13:35
其他回答(3)
0

一次上传几百万?为什么不分几次上传呢?

收获园豆:1
jerry128 | 园豆:31 (初学一级) | 2014-02-20 18:28
0

几百万的数据,一般用DataReader结合SqlBulkCopy 实现。你可以检查下是否DataReader这边超时了。而且,计算1000万数据的话,算每秒五千条,也大概只需要半小时。

收获园豆:1
幻天芒 | 园豆:36522 (高人七级) | 2014-02-20 22:45

是局域网服务器,一般也就十几秒就能上传300万数据了。

服务器还是比较差的那种,普通台式电脑。

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2014-02-26 14:03

@Albert Fei: 局域网确实要快很多,少了流量限制。

支持(0) 反对(0) 幻天芒 | 园豆:36522 (高人七级) | 2014-02-26 22:49
0

应该是使用SqlBulkCopy分批次上传的每次不超过2万条,在数据库里建一个临时表(不是真正的临时表)分批次全部上传完了之后,再一次insert into 正式表 select * from 临时表,然后trancate table 临时表,提交事务。

收获园豆:1
数据酷软件 | 园豆:41 (初学一级) | 2014-02-26 09:46

truncate

支持(0) 反对(0) 数据酷软件 | 园豆:41 (初学一级) | 2014-02-26 09:48

没有那么复杂,谢谢!

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2014-02-26 14:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册