我需要大大改善目前流程的执行时间:
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
一起使用,如下所述:
对我来说,对我的代码来说,这似乎是一个更好的选择,但无法弄清楚如何对其进行编码,尽管我想使用它。
我可以帮助翻译一下代码吗?
提前致谢
答案 0 :(得分:1)
正如您已经想到的那样,您需要实现自定义IDataReader。 由于您的源是Dictionary - 只有少数相对简单的方法/属性,如int FieldCount,bool Read(),对象Get(int i)应该实现。
您可以通过Google搜索 sqlbulkcopy custom idatareader 找到自定义IDataReader实现的有用示例(a simple one。
另请注意,SqlBulkCopy会忽略触发器,外键和其他约束,并且无法处理异常。