IDatareaderとSqlBulkCopyを使用してDictionary要素をSQLテーブルに行として挿入する

c# datareader dictionary sql sqlbulkcopy

質問

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

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に新しいバージョンのために、私は使用して読んきたSqlBulkCopy一緒にしIDatareaderで述べたように、:

SqlBulkCopyのパフォーマンス

C#ループと一括挿入

それは私のコードのためのより良い選択肢のように見えますが、コード化する方法を理解することはできませんが、私はそれを使いたいと思います。

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

前もって感謝します

受け入れられた回答

すでに分かっているように、カスタムIDataReaderを実装する必要があります。あなたのソースはDictionaryであるため、int FieldCount、bool Read()、オブジェクトGet(int i)などの比較的シンプルなメソッドやプロパティはほとんど実装されていません。

sqlbulkcopyカスタムidatareaderを使って 、カスタムIDataReader実装の便利な例( シンプルなもの )を見つけることができます。

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



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ