用SqlBulkCopy 方法一次上传几百万条数据,总是报超时,怎么办?
本人已经把BulkCopyTimeout这个时间设的很长了(设为几十分钟),但还是几十秒就报超时。
大家有没有遇到过这样的问题?
请给点建议?
本人已经把BulkCopyTimeout这个时间设的很长了
@Albert Fei: 示例代码演示了 BulkCopyTimeout 属性的使用,说明这个属性是启作用的。你的不启作用,是不是你的代码跟示例代码不同?超时应该是通过异常的方式抛出,不知道这个异常的详细信息是什么?
@Albert Fei: 楼上说的有道理,把 异常的详细信息贴出来也许能判断是哪里超时,可能超时的地方很多,如果是asp.net,web请求也可能超时。
@C#开发人员: 是的,你们说的都有道理,是数据库的执行超时,我以为是BulkCopyTimeout没有起作用!
因为我也在程序中设置了数据库的连接超时(connect timeout)和sqlcommand执行超时.
后来我直接在数据库里改掉了,就好了。
一次上传几百万?为什么不分几次上传呢?
几百万的数据,一般用DataReader结合SqlBulkCopy 实现。你可以检查下是否DataReader这边超时了。而且,计算1000万数据的话,算每秒五千条,也大概只需要半小时。
是局域网服务器,一般也就十几秒就能上传300万数据了。
服务器还是比较差的那种,普通台式电脑。
@Albert Fei: 局域网确实要快很多,少了流量限制。
应该是使用SqlBulkCopy分批次上传的每次不超过2万条,在数据库里建一个临时表(不是真正的临时表)分批次全部上传完了之后,再一次insert into 正式表 select * from 临时表,然后trancate table 临时表,提交事务。
truncate
没有那么复杂,谢谢!