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が必要です。これはパフォーマンスに優れていますか?可能であれば、メモリDataTableを使用せずに、データソースからSQLServerに直接挿入したいと思います。

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 Integration Service" を使用して、ソース データ フローから宛先データ フローにデータを変換できます。ソースはテキスト ファイル、宛先は SQL Server テーブルにすることができます。変換は一括挿入モードで実行されます。

于 2012-05-24T04:41:03.910 に答える