Roy*_*oyT 6 c# sql loops sqlcommand insert
谁能告诉我以下2种插入记录的方式可以创造更好的性能?
情况1
SqlCommand cmd = new SqlCommand();
for (int i = 0; i < 10000; i++)
{
cmd = new SqlCommand("insert into test(id, name) value('" + i + "', '" + i + "')");
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
案例2
string sql = null;
for (int i = 0; i < 10000; i++)
{
sql += "insert into test(id, name) value('" + i + "', '" + i + "')";
}
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 61
首先:停止连接你的SQL代码!! 这是邀请黑客到处用SQL注入攻击你!请改用参数化查询!
我会用这个解决方案:创建一个单一的SqlCommand与参数化查询,并执行:
string stmt = "INSERT INTO dbo.Test(id, name) VALUES(@ID, @Name)";
SqlCommand cmd = new SqlCommand(smt, _connection);
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 100);
for (int i = 0; i < 10000; i++)
{
cmd.Parameters["@ID"].Value = i;
cmd.Parameters["@Name"].Value = i.ToString();
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
或使用SqlBulkCopy,特别是如果你插入甚至超过10,000行.
第二种方法看起来比#1快,因为您一次发送INSERT命令.首先是每个ExecuteNonQuery的SQL服务器往返.
但是你应该尝试批量插入命令:BULK INSERT(Transact-SQL),我想你会获得比你提供的任何一个选项更好的性能.
[]的