C#SQL插入命令

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行.


Fab*_*bio 6

第二种方法看起来比#1快,因为您一次发送INSERT命令.首先是每个ExecuteNonQuery的SQL服务器往返.

但是你应该尝试批量插入命令:BULK INSERT(Transact-SQL),我想你会获得比你提供的任何一个选项更好的性能.

[]的

  • @KenWhite我认为答案非常合适.它没有直接回答这个问题,因为OP使用的是低效的流程.我预感OP并不是在寻找哪种方式使用更少的CPU周期(因为他们可以很容易地测试自己,如果这正是他们想知道的).相反,我认为OP正在试图了解哪种方式更有效,而Fabio提供的解决方案比任何一种OP都更好. (2认同)