.NET Excel数据使用SqlBulkCopy

我有一个需要插入MS Sql服务器表的大量数据的Excel文件。 Excel数据在每列中包含不同的数据types。 我需要循环遍历每行的数据,并将其转换为一个string,该行的每列都用逗号分隔。

Excel data ( | = column seperation): ID | FirstName | LastName | 1 | John | Smith | 2 | Amy | Jones | 

所以新的行将如下所示:

 Row 1= ID, FirstName, LastName Row 2= 1, John, Smith Row 3= 2, Amy, Jones 

那么转换后的每一行数据都需要插入到Sql表中。 请注意,excel文件可能包含10,000多行。

使用C#.NET在.NET中执行此操作的最有效方法是什么?

尝试编写下面的C#程序:

  1. 使用Microsoft.Office.Interop.Excel命名空间中的类读取Excel文件内容。
  2. 转换行,并以SQL Server的BULK INSERT命令可以理解的格式将其写入另一个文件中。
  3. 使用BULK INSERT命令有效地插入SQL Server数据库中的所有行。

更新 :还有一些支持的方法不需要编写任何代码 。 以下知识库文章总结了这些文章: http : //support.microsoft.com/kb/321686 。

另一个解决scheme是使用SqlBulkCopy批量插入SQL Server。

你必须阅读excel,并创build一个.csv文件,但是之后所有的工作都完成了。 你可以检查这个例子。

去multithreading,这是最有效的方式来插入大量的数据,你需要即时转换而不使用SqlBulkCopy。 理由是当一个线程正在将其当前行数据转换为您需要其他线程正在从数据源读取或插入数据库的格式。

我有一个每月收到的Excel电子表格,并插入到SQL服务器数据库中。 该表包含大约260,000行,使用我写的程序插入所有的数据只需要1分多钟。 当试图按顺序插入时,程序运行超过40分钟,然后杀死它。

我的解决scheme使用VB.net只是因为Excel交互更容易。 你可以用C#编写类似的东西,或者从VB代码中创build一个库(DLL),并从你的C#应用​​程序链接到它。 它将整个电子表格加载到内存中,然后分配10k行的块来分离线程; 最后任何小于10K的行都被分配到最后一个线程。 每个线程从内存中读取一行数据,创build一个INSERT语句并对数据库执行。

如果你愿意的话,我很乐意分享这些代码,但是在这个答案中发布是有点多。 让我知道如果你有兴趣。