谁能告诉我以下两种插入记录的方式可以带来更好的性能?
案例一
SqlCommand cmd = new SqlCommand();
for (int i = 0; i < 10000; i++)
{
cmd = new SqlCommand("insert into test(id, name) value('" + i + "', '" + i + "')");
cmd.ExecuteNonQuery();
}
案例二
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();
最佳答案
首先:停止将您的 SQL 代码连接在一起!这是对各地黑客的邀请用SQL注入(inject)攻击你!请改用参数化查询!
我会使用这个解决方案:创建一个带有参数化查询的单个 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();
}
或使用 SqlBulkCopy
,尤其是当您要插入超过 10,000 行时。
关于C# SQL 插入命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218867/