6

我有一个包含 350,000 行的 csv 文件,每行大约有 150 列。

使用 ADO.Net 将这些行插入 SQL Server 的最佳方法是什么?

我通常这样做的方式是手动创建 SQL 语句。我想知道是否有任何方法可以将其编码为简单地将整个数据表插入 SQL Server?或者像这样的一些捷径。

顺便说一句,我已经尝试过用 SSIS 来做这件事,但是有一些数据清理问题我可以用 C# 处理,但用 SSIS 就不那么容易了。数据以 XML 开始,但为了简单起见,我将其更改为 CSV。

4

3 回答 3

7

创建一个实现 IDataReader 的类“CsvDataReader”。只需实现 Read()、GetValue(int i)、Dispose() 和构造函数:如果需要,您可以让其余部分抛出 NotImplementedException,因为 SqlBulkCopy 不会调用它们。使用 read 处理每行的读取,使用 GetValue 读取行中的第 i 个值。

然后使用所需的适当列映射将其传递给 SqlBulkCopy。

使用该方法,我获得了大约 30000 条记录/每秒的插入速度。

如果您可以控制源文件格式,请将其设为制表符分隔,因为它比 CSV 更容易解析。

编辑: http: //www.codeproject.com/KB/database/CsvReader.aspx - tx Mark Gravell。

于 2009-04-05T05:20:01.303 回答
2

SqlBulkCopy(如果可用)。这是使用C# 在 ADO.NET 2.0中使用 SqlBulkCopy 的非常有用的解释

我认为您可以将 XML 直接加载到 DataSet 中,然后将 SqlBulkCopy 映射到数据库和 DataSet。

于 2009-04-05T04:52:25.457 回答
1

嘿,您应该恢复为 XML 而不是 csv,然后使用 openxml 将该 xml 文件加载到临时表中,清理临时表中的数据,然后最后处理这些数据。

我一直在使用这种方法来导入大量数据,其中我的 XML 文件大小恰好 > 500 mb,而 openxml 就像一个魅力。

与手动 ado.net 语句相比,它的运行速度会快得多,您会感到惊讶。

于 2009-04-05T05:27:28.260 回答