首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server数据导入困境

Server数据导入困境
EN

Stack Overflow用户
提问于 2012-09-20 17:12:23
回答 3查看 482关注 0票数 1

我已经创建了一个将CSV文件导入数据库表的应用程序,并且我已经获得了需要导入到Server数据库中的表中的多个CSV文件。

我想到了几种方法,但我不确定哪种方法最实用。应用程序的工作方式是要求用户选择他们想要导入的文件(从他们的本地文件系统中),然后他们只需单击一个[Load Files]按钮。这些文件有时可能包含100,000+行。

对于上述情况,有什么更好呢?

  1. 使用C#和开放源码GenericParser将CSV文件导入datatable,然后使用传统的BulkCopy方法将datatable推到数据库中。 备注:我担心的是,当用户PC对带有100,000+行的文件执行此操作时,会造成压力。这将如何影响处理或它会使程序崩溃?
  2. 使用Bulk Insert,它需要文件名和路径。对于此选项,我不确定服务器是否能够处理Bulk Insert命令,而不知道物理文件是否位于服务器上?文件路径将与用户本地机器相关联。我唯一一次使用大容量插入是当我登录到服务器本身,这是不可能的这个应用程序。
  3. 有办法用Linq吗?虽然我对Linq并不十分熟悉,但如果可以实现的话,我愿意尝试它。

任何洞察力都是值得赞赏的。我知道我需要做什么,只是不知道如何实际地完成它。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-20 17:17:18

我的建议是在SqlBulkCopy中使用.NET类。它将允许您在BULK INSERT语句中导入行的速度几乎一样快,但只需要使用这些行填充DataTable,然后将它们发送到Server。

您可能需要考虑的另一个问题是(这是我个人最喜欢的简单文件导入程序)使用PowerShell而不是C#,后者有一个用于导入CSV文件的内置cmdlet。很酷的东西。

票数 1
EN

Stack Overflow用户

发布于 2012-09-20 17:24:08

1) .Net中的加载程序是一个很好的选择。100,000行实际上不是一个繁重的工作负载,特别是对于简单的负载。只有当为了快速查找值而涉及到大量的多表连接时,这才是一个大问题。

2)虽然严格来说物理文件的位置只是一个性能问题,但我不会这么做。这会带来行政上的麻烦。

3)我没有林克的经验,我不能说。

另一个好处是:如果您在某个地方运行IIS,甚至在DB服务器上运行,您可以创建一个轻量级的、单页的"webapp“,它只是一个带有ODBC连接到DB的CGI脚本,用户只需将CSV作为"web/CGI”上传即可。这样没有实用程序可以安装在用户工作站上。

票数 0
EN

Stack Overflow用户

发布于 2012-09-20 17:33:04

为了解决你的问题,你必须从两个基本观点中看到:

  1. 在插入数据库之前,是否需要对数据进行一些操作(一些定制、更正、.)?如果是的话,这是将行从一个文件上传到另一个对象(每一行到一个对象实例中)的最佳方法。而且您可以用Linq来优雅地移动项目列表。
  2. 是否只需要按原样从文件插入行到数据库?在这个例子中,使用你问题的第2点所描述的过程。

我更喜欢上传文件到服务器之前,任何行动。更安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12517543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档