SQL Server数据导入困境

时间:2012-09-20 17:12:24

标签: c# sql sql-server

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

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

对于上述情况会更好吗?

  1. 使用C#和开源GenericParser将CSV文件导入数据表,然后使用BulkCopy的传统方法将数据表推送到数据库

    注意:对于拥有超过100,000行的文件执行此操作时,我担心的是用户PC的压力。这将如何影响处理或将程序崩溃?

  2. 使用批量插入,需要文件名和路径。我对此选项的关注是,我不确定服务器是否能够处理批量插入命令而物理文件不在服务器上?文件路径将与用户本地计算机相关。我使用Bulk Insert的唯一一次是当我登录到服务器本身时,这个应用程序无法使用。

  3. 有没有办法用Linq做到这一点?虽然我不熟悉Linq,如果可以实现的话,我愿意尝试。

  4. 任何见解都表示赞赏。我知道我需要做什么,只是不确定如何实际完成它。

    由于

3 个答案:

答案 0 :(得分:1)

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

您可能想要考虑的另一个考虑因素是(并且这是我个人最喜欢的简单文件导入程序)使用PowerShell而不是C#,其中built-in cmdlet用于插入CSV文件。很酷的东西。

答案 1 :(得分:0)

1).Net中的加载器应用程序通常是一个不错的选择。 100,000行真的不是一项繁重的工作量,特别是对于简单的负载。只有为了在运行中查找值而涉及大量的多表连接时才真正成为一个大问题。

2)虽然严格来说物理文件位置只是一个性能问题,但我不会这样做。它将引入行政头痛。

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

只是为了获得额外的奖励:如果你在某个地方运行IIS,甚至可能在数据库服务器上运行,你可以制作一个轻量级的单页“webapp”,这只是一个带有ODBC连接到数据库的CGI脚本和用户只需将CSV作为“web / CGI”上传提供。没有实用程序应用程序以这种方式安装在用户工作站上。

答案 2 :(得分:0)

要解决您的问题,您必须在两个基本视图中看到:

  1. 在插入数据库之前是否需要对数据进行一些操作(一些sumarization,correction,...)? 如果是,那么这是将行从文件上传到对象(每行到一个对象实例)的最佳方法。而且你可以优雅地使用Linq的项目列表移动。

  2. 您是否只需要将文件中的行插入数据库中? 在这种情况下,请使用问题第2点中描述的过程。

  3. 我希望在执行任何操作之前将文件上传到服务器。它更安全。