我对C#中的循环DataTable有疑问
我有一个DataTable有大约20.000行和60列
我想编写一个SQL查询来将DataTable中的所有数据插入数据库
我正在使用My Sql
这是我的SQL语法:
"Insert into a values (...), (...), (...), ..."
“(...)”是一行中的所有数据
这是C#代码:
DataTable myDataTable; // myDataTable has 20.000 rows and 60 columns
string mySql = "insert into a values "
for(int iRow = 0; iRow < myDataTable.Rows.Count; iRow++)
{
mySql += "(";
for(int iColumn = 0; iColumn < myDataTable.Columns.Count; iColumn++)
{
string value = myDataTable.Rows[iRow][iColumn].ToString()
string parameter = "@" + iRows.ToString() + iColumns.ToString();
// here is some code for add "parameter" and "value" to MySqlCommand
mySql += ","
}
// remove "," at the end of string mySql
mySql = mySql.SubString(0, mySql.Length - 1);
mySql += "),"
}
// remove "," at the end of string mySql
// after that, I will execute mySql command to insert data into database here
当我运行该代码时,需要花费大量时间才能完成
我尝试从“string”更改为“StringBuilder”,但它稍快一点。
如何让代码运行得更快?
感谢所有支持。
答案 0 :(得分:1)
我在评论中要求提供一些时间信息,但后来我注意到这行代码:
mySql = mySql.SubString(0, mySql.Length - 1);
我建议您从循环中删除它并使用稍微更智能的代码,只在需要时附加逗号。
例如,在内部循环中,在每个参数之前而不是之后添加逗号到mySql
变量,除了iColumn == 0
之外。这样就可以阻止不必要的逗号每次都在字符串的末尾。