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();
    }
}
相关推荐
FuckPatience5 小时前
C# 对象初始化器对属性赋值vs构造函数里对属性赋值
c#
m0_748233176 小时前
C语言vsC#:核心差异全解析
c语言·开发语言·c#
MyBFuture6 小时前
C# 关于联合编程基础
开发语言·c#·visual studio·vision pro
Sunsets_Red7 小时前
单调队列优化dp
c语言·c++·算法·c#·信息学竞赛
故事不长丨7 小时前
《C#委托与事件深度解析:区别、联系与实战应用》
开发语言·c#·委托·事件·event
山峰哥7 小时前
SQL调优实战密码:索引策略与Explain工具深度破局之道
java·开发语言·数据库·sql·编辑器·深度优先
梅梅绵绵冰8 小时前
sql题库知识点
数据库·sql
阳光九叶草LXGZXJ8 小时前
达梦数据库-学习-49-DmDrs控制台命令(同步之EXEC模块)
linux·运维·数据库·sql·学习
root666/8 小时前
【Java-后端-Mybatis】DISTINCT 作用
数据库·sql·mybatis
程序猿小玉兒8 小时前
解决大文件上传失败问题
c#·.net