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新版本,但我一直在阅读有关 using SqlBulkCopywith with 的信息IDatareader,如下所述:

SqlBulkCopy 性能

C# 循环和批量插入

在我看来,我的代码是一个更好的选择,但无法弄清楚如何对其进行编码,尽管我想使用它。

请问我可以帮忙翻译一下代码吗?

提前致谢

4

1 回答 1

1

正如您已经知道的那样,您需要实现自定义IDataReader。由于您的来源是 Dictionary - 应该只实现几个相对简单的方法/属性,例如 int FieldCount、bool Read()、object Get(int i)。

您可以通过谷歌搜索sqlbulkcopy custom idatareader 找到自定义 IDataReader 实现的有用示例(一个简单示例) 。

还要记住,SqlBulkCopy 会忽略触发器、外键和其他约束,并且无法处理异常。

于 2013-09-29T13:00:24.720 回答