C#SQL插入命令
谁能告诉我以下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(); }
案例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();
首先: 停止连接你的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(); }
或者使用SqlBulkCopy
,特别是如果你插入甚至超过10'000行。
第二种方法看起来比#1快,因为您一次发送INSERT命令。 在第一个是每个ExecuteNonQuery的SQL服务器往返。
但是你应该尝试批量插入命令: BULK INSERT(Transact-SQL) ,我猜你会得到比你提供的任何一个选项更好的性能。
[]的
应该明确指出原样,两种情况都不会起作用。
情况#1需要指定连接。
情况#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();
最终,最好的方法是让你自己在几千行上自己测试一下。 我的猜测是Case#2对性能会更好,因为它不仅需要设置一个SqlCommand
对象,而且它只能一次点击数据库。
我不认为第二个会起作用。
但是,SQL Server 2008中有一种语法用于在单个INSERT语句中插入多行 ,我认为这将比您提出的两个选项更快:
INSERT INTO test (id, name) VALUES ('1', 'foo'), ('2', 'bar'), ('3', 'baz') -- etc...
但是,如果您真的想要高性能,请考虑使用SqlBulkCopy
类。
第二个可能更快,因为你最终只能进行一次往返。 两者都同样糟糕,因为您不使用参数化查询 。
上述就是C#学习教程:C#SQL插入命令分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1030550.html