1

現在、次のようなプロセスの実行時間を劇的に改善する必要があります。

private Dictionary<int, SingleElement> elements_buffer;

// ... Create and load values into "elements_buffer"
// (string, Datetime, double)

string query = "INSERT INTO Tests.dbo.test_table "
    + "(element_name,element_init,element_width) VALUES";

SingleElement element_aux;

for (int i = 0; i < MAX_ELEMS_IN_DICT; i++)
{
    element_aux = elements_buffer[i];

    query = query
        + "('"
        + element_aux.name
        + "','"
        + element_aux.init
        + "',"
        + element_aux.width
        + ")";

    if (i < MAX_ELEMS_IN_DICT+1) {
        query = query + ",";
    }
}

// ... Execute the query

私は新しいバージョンに使用するつもりでしたが、と一緒にDatatable使用することについて読んでいました。SqlBulkCopyIDatareader

SqlBulkCopy のパフォーマンス

C# ループと一括挿入

私のコードにとってはより良い選択のように思えますが、それを使用したいのですが、それをコーディングする方法を理解することができません。

翻訳されたコードについて助けてもらえますか?

前もって感謝します

4

1 に答える 1

1

すでにわかっているように、カスタムIDataReaderを実装する必要があります。ソースがディクショナリであるため、int FieldCount、bool Read()、object Get(int i) などの比較的単純なメソッド/プロパティのみを実装する必要があります。

sqlbulkcopy カスタム idatareaderをグーグルで検索すると、カスタム IDataReader 実装の便利な例 (単純なもの) を見つけることができます。

また、SqlBulkCopy はトリガー、外部キー、およびその他の制約を無視し、例外を処理できないことに注意してください。

于 2013-09-29T13:00:24.720 に答える