技术图文:如何利用 C# 向 Access 数据库插入大量数据?

背景

通常我们在做数据分析与处理之前,需要把从网站爬取的数据或者从 甲方 系统中导出的数据存入到自己的数据库中。如果数据量小,直接利用 SQL的 Insert 语句逐条插入就好。可是数据量上万条之后,再利用这样的方法就会奇慢无比,让人无法忍受。

最近在优化 台区线损排查分析软件 时遇到从集中器采集的上万条语句的入库,以及 继电保护可靠性评估与检修决策软件 中导入几万条 变电站一次设备的保护告警数据,都需要等待很长时间的问题。虽然解决问题时,是难过的,但搞定之后还是非常的开心。很享受这样的心流体验。

现在,我把解决的方法记录下来,以方便大家在遇到此类问题时作为参考。


技术分析

最开始,使用 OleDb,打开数据库链接以后,先生成几万条 SQL 的语句,然后循环遍历执行,向数据库中写入记录,慢的出翔了。

不能忍,尝试改进一个版本

仍然使用 OleDb,采用参数赋值的方法,构造 OleDbParameter,然后循环修改参数,向数据库中写入记录,结果没有性能提升。

不能忍,继续尝试其它的方法

这次使用 Transaction,通过事务的方式向数据库中写入记录,由于事务将大量的 SQL 语句一次提交处理,所以速度有所提升,但仍然慢的要死。

不能忍,继续尝试改进,要哭死的感觉。

查了很多资料,这次使用 OleDbDataAdapter,利用这个桥接器将插入的数据更改(Update)回数据源,可依然慢的要死。

没有办法,问题需要解决,继续寻找解决方案。

受到这个帖子的启发,这次使用 DAO 的方式。

https://stackoverflow.com/questions/7070011/writing-large-number-of-records-bulk-insert-to-access-in-net-c

结果喜人,把以前5分钟左右的插入问题,3秒钟之内完成,提升10多倍。

技术图文:如何利用 C# 向 Access 数据库插入大量数据?

2. 利用 DAO 方式。

3. 实验结果

从Excel中导入的告警数据:

技术图文:如何利用 C# 向 Access 数据库插入大量数据? 青少年编程备考 技术图文:如何利用 C# 向 Access 数据库插入大量数据? 微信公众号 技术图文:如何利用 C# 向 Access 数据库插入大量数据? 我们一起努力辅助孩子掌握编程技能。

来源:青少年编程备考

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月22日
下一篇 2019年3月22日

相关推荐