11

我有一个 Windows 服务应用程序,它接收具有以下格式的数据流

IDX|20120512|075659|00000002|3|AALI                 |Astra Agro Lestari Tbk.                                     |0|ORDI_PREOPEN|12  |00000001550.00|00000001291.67|00001574745000|00001574745000|00500|XDS1BXO1|                                        |00001574745000|ݤ
IDX|20120512|075659|00000022|3|ALMI                 |Alumindo Light Metal Industry Tbk.                          |0|ORDI        |33  |00000001300.00|00000001300.00|00000308000000|00000308000000|00500|--U3---2|                                        |00000308000000|õÄ

这些数据以数百万行和顺序00000002....00198562出现,我必须根据顺序解析它们并将它们插入到数据库表中。

我的问题是,将这些数据插入数据库的最佳方式(最有效)是什么?我尝试使用一种简单的方法来打开 SqlConnection 对象,然后生成一串 SQL 插入脚本,然后使用 SqlCommand 对象执行脚本,但是这种方法花费的时间太长。

我读到我可以使用 Sql BULK INSERT 但它必须从文本文件中读取,这种情况是否可以使用 BULK INSERT?(我以前从未使用过它)。

谢谢

更新:我知道 SqlBulkCopy 但它要求我首先拥有 DataTable,这对性能有好处吗?如果可能的话,我想直接从我的数据源插入到 SQL Server,而不必在内存中使用 DataTable。

4

3 回答 3

22

如果您使用 C# 编写此代码,您可能需要查看SqlBulkCopy类。

让您可以使用来自其他源的数据有效地批量加载 SQL Server 表。

于 2012-05-24T04:33:03.020 回答
3

首先,下载免费的 LumenWorks.Framework.IO.Csv库。

二、使用这样的代码

StreamReader sr = new TextReader(yourStream);
var sbc = new SqlBulkCopy(connectionString);
sbc.WriteToServer(new LumenWorks.Framework.IO.Csv.CsvReader(sr));

是的,这真的很容易。

于 2013-02-05T06:23:38.723 回答
0

您可以使用 SSIS“Sql Server 集成服务”将数据从源数据流转换为目标数据流。源可以是文本文件,目标可以是 SQL Server 表。您的转换以批量插入模式执行。

于 2012-05-24T04:41:03.910 回答