在SQL中,如果你想一次性插入多行数据,可以使用INSERT INTO语句配合VALUES子句插入多条数据。
sql
insert into table (col1,col2) values (val1_1,val1_2), (val2_1,val2_2), (val3_1,val3_2);
如何在执行这样的语句时,使用参数化查询防止SQL注入呢?
cs
using (var connection=new SqlConnection(connectionString)) {
//向数据库插入的3条信息
var data = new (string name, int age)[] {
("张三",10),
("李四",12),
("王五",15)
};
var valueList=new List<string>();
var parameterList=new List<SqlParameter>();
//// 构造参数占位符:(@name0,@age0),(@name1,@age1),...,并赋值对应的参数
for(int i = 0;i<data.Length;i++) {
valueList.Add($"(@name{i},@age{i})");
parameterList.Add(new SqlParameter($"@name{i}",data[i].name));
parameterList.Add(new SqlParameter($"@age{i}",data[i].age));
}
using(var command = connection.CreateCommand()){
command.CommandText=$"insert into table(name,age) values {string.Join(",",valueList)};";
//通过Parameters.AddRange方法插入参数数组
command.Parameters.AddRange(parameterList.ToArray());
command.ExecuteNonQuery();
}
}