C#-asp.net开发的B/S系统,需要将Excel导入数据库。

发布于 2017-01-04 23:54:59 字数 137 浏览 875 评论 4

如题,需要将Excel导入数据库,由于数据量特别大。如果加事物导入的话,导入起来会对数据库造成很大压力,但是如果不加事物,一条一条的像数据库中添加的话,中途断了就需要重新导入。这样会产生很多重复数据。请问各位高手这个该如何解决阿。有没什么解决方案点拨一下小弟?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

泛泛之交 2017-08-28 22:02:18

你可以在excel中添加一列作为标记列,验证不通过的数据加上标记,不放入dataset,通过的数据放入dataset,这样我们一次只将对的数据放到dataset中,并且更新数据库,下次我们打开excel看那些错了(最好是把错误信息也写入到标记列)这样改对了再次导入,当然这样做只能减少你导入的次数,并不能缩短一次导入数据的时间。
如果要优化速度,应该从验证入手,凭经验大部分速度问题是由于做了多余的操作,特别是数据多的时候更明显。

想挽留 2017-06-23 09:45:37

不知道你的导入的数据量达到多少?

我也遇到过这种问题,但后来发现,所用的时间,70%都是excel的读取时间,反而数据库写入时间并不长。

我的方法是在单机上导入,逐条从excel读入后,并不直接写入数据库,而是写入单机中独立的同结构的DataSet中。
在全部读取完毕后,再一次性连接数据库,把DataSet保存入数据库中。

保存数据并不只是写入数据库,还会首先建立导入记录,分配唯一的导入编号。这样,在出问题,或需要删除过往的导入记录时,可以一次性根据唯一的导入编号,删除数据库中被导入的数据。

采用这个方法,即使在读取excel过程中出错,那么会在写入数据库之前中断。如果在读取完毕后,写入数据库的过程中出错。那么可以通过唯一的导入编号,删除掉之前导入的数据,纠正错误后,重新再倒入。或者是直接try/cache方式直接回滚掉写入的数据。

这样可以保持数据的准确性及唯一性。

用这个方法,目前每次3份,每份excel数据量是单一份表格的最大容量。虽然导入的时间会长点,那个无法改善,因为excel读取方式已经固定了,也决定了它的读取速度。但数据完整性是可以保证的。

灵芸 2017-04-30 22:16:35

我是做C/s架构的,也经常遇到将excel中的数据导入输入数据库的需求,不过我一般分两步做,第一步把excel的数据读取进DataTable对象里,第二步使用事务一条一条插(这里可以偷懒,用适配器查询出一个空的DataTable对象,然后把Excel的数据插入这个DataTable表中,这样的话,更新就可以使用适配器一次更新了),不过网上方法很多,自己可以参考一下,至于你说到的数据量很大,个人觉得读取Excel的耗时更长,所以不要读一条数据插一条数据

虐人心 2017-03-26 22:03:53

1)先确定是否有办法区分出excel数据记录行的唯一性,如果可以,自己来维护事务,比如通过时间戳,主键等
2)大数据量,建议使用bluk copy,性能差别非常之大

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文