3

300万行のcsvファイルがあり、c#を使用してデータベースに保存したいと考えています。csvファイルは「device;date;value」のようになります。

配列に書き込むか、System.Data.DataTableに直接書き込むか。そして、このDataTableをデータベース(SQL-Serverなど)に格納するための最速の方法は何ですか。

300万のinsertintoステートメントを使用して行を保存しようとしましたが、遅すぎました:)

ありがとう

4

4 に答える 4

4

DataTable にデータをロードし、SqlBulkCopyを使用して日付を SQL Server のテーブルにコピーできます。

SqlBulkCopy クラスは、SQL Server テーブルにのみデータを書き込むために使用できます。ただし、データ ソースは SQL Server に限定されません。データを DataTable インスタンスに読み込むか、IDataReader インスタンスで読み取ることができる限り、任意のデータ ソースを使用できます。.

于 2013-02-26T11:24:31.423 に答える
0

BCPはかなり速いと思います。DataTable にデータを取得したら、試すことができます

using (SqlBulkCopy bcp= new SqlBulkCopy(yourConnectionString))
{
    BulkCopy.DestinationTableName = "TargetTable";
    BulkCopy.WriteToServer(dataTable);
}
于 2013-02-26T11:26:28.780 に答える
0

最善の方法は、ストリーム リーダーを開き、1 行ずつ行を作成することだと思います。while ループと分割で ReadLine を使用して、異なる部分を見つけます。

于 2013-02-26T11:26:59.110 に答える
0

300 万回の挿入ステートメントを送信すると、非常に遅くなります。

トランザクションを使用してバッファリングし、たとえば一度に 200 ~ 1000 行を読み込んで (データが小さいほど、一度に読み込める量が多くなります)、これらの行を読み込んだ後、挿入をデータベースに直接コミットします。

于 2013-02-26T11:27:41.543 に答える