C#+SQL:使用参数化查询通过values子句插入多行数据

在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();
    }
}
相关推荐
当青春邂逅吉米多维奇3 小时前
C#图解教程(第5版) 同步方法
开发语言·c#
波力海苔夹心脆6754 小时前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
imDwAaY5 小时前
一条 SQL 发出去之后,MySQL 到底做了什么?
sql·mysql
Behavior6 小时前
国内下载使用 Unity 6000 踩坑点总结
c#·unity3d·游戏开发
czhc11400756637 小时前
一张图从哪来,一个判断往哪走
c#
曹牧17 小时前
C#:未被引用的函数
c#
刘胡子大叔17 小时前
SQL 脚本的导入顺序
数据库·sql
上位机妹子1 天前
EF Core 两种继承映射:每层次一张表(TPH)与每类型一张表(TPT)
数据库·c#·.netcore·ef core
小羊没烦恼!1 天前
jQuery1.5的改进细节
java·服务器·开发语言·前端·c#