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();
    }
}
相关推荐
c#上位机6 小时前
C#上位机项目实战——Task.Run执行带参数的方法
c#·上位机
bbq粉刷匠7 小时前
触发器(下):事务与锁、binlog 一致性与替代方案
sql
浅念-9 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
Lost of 程序猿12 小时前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
databook14 小时前
使用 DuckDB 分析 Parquet 文件
sql·数据分析·nosql
点纭15 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
旺仔不是程序员15 小时前
相关子查询与性能优化:PostgreSQL 逐行执行的代价与 JOIN 重写
数据库·后端·sql
用户7884773163416 小时前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
Lost of 程序猿17 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net