多行插入的 IDBCommand 参数
Posted
技术标签:
【中文标题】多行插入的 IDBCommand 参数【英文标题】:IDBCommand Parameters for multi-line insert 【发布时间】:2013-01-23 09:34:36 【问题描述】:我想按照以下几行创建一个多行插入语句:
insert into foo (
value1,
value2,
value3
) values
( "1", "2", "3"),
( "4", "5", "6"),
( "7", "8", "9");
要插入的行数是可变的。有没有办法使用IDBCommand
参数化构造这个查询?
【问题讨论】:
【参考方案1】:这样的东西应该可以正常工作。
IDbCommand cmd = new SqlCommand();
StringBuilder sb = new StringBuilder();
sb.Append("insert into foo(col, col2, col3), values");
int parms = 0;
for(int i = 0 ; i<3; i++)
sb.AppendFormat("( @0, @1, @2),", parms, parms + 1, parms + 2);
cmd.Parameters.Add(new SqlParameter((parms++).ToString(), ""));
cmd.Parameters.Add(new SqlParameter((parms++).ToString(), ""));
cmd.Parameters.Add(new SqlParameter((parms++).ToString(), ""));
sb.Append(";");
cmd.Parameters;
cmd.CommandText = sb.ToString().Replace(",;", ";");
【讨论】:
一个语句可以添加多少个参数有限制吗? 我认为SQL server有200-300范围的限制【参考方案2】:据我所知,无法一次向IDbCommand
提供可变数量的参数。您可以创建一次IDbCommand
,然后为每组参数值重复使用它:
using (IDbCommand command = myConn.CreateCommand())
command.CommandText = "insert into foo (value1, value2, value3) values (@v1, @v2, @v3)";
IDbDataParameter param1 = command.CreateParameter() ParameterName = "@v1" ;
// param2, param3
foreach (string[] row in records)
param1.Value = row[0];
// param2, param3
command.ExecuteNonQuery();
特别是在事务中,如果您关心性能,这应该很快。请参阅this thread,讨论在事务中一个大的串联插入与多个ExecuteNonQuery
s 的性能。
【讨论】:
那不是要求我每行进行一次查询吗?布莱赫。 我已经更新了我的答案,以显示每次只需要更新参数值,而不是整个命令。我还没有测试代码,可能包含一两个错字。以上是关于多行插入的 IDBCommand 参数的主要内容,如果未能解决你的问题,请参考以下文章
为IDBCommand和SqlCommand.ExecuteNonQueryAsync实现异步ExecuteNonQuery()
2017.11.01 ExecuteNonQueryExecuteScalarExecuteDataSetFillDataSet 流程