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();
    }
}
相关推荐
山岚的运维笔记1 小时前
SQL Server笔记 -- 第77章:文件组
数据库·笔记·sql·microsoft·oracle·sqlserver
啊哈哈121384 小时前
SQL学习笔记7:综合查询与高级技巧全解析 + LeetCode实战
笔记·sql·学习
fdc20175 小时前
解耦的艺术:用责任链模式构建可插拔的文件处理流水线
c#·.net·责任链模式
bugcome_com5 小时前
【C# 数组详解】Array 定义、初始化、遍历、内存原理与面试高频问题
后端·c#·asp.net
小码编匠5 小时前
WPF 如何在 MVVM模式下实现 DataGrid编辑功能
后端·c#·.net
愚公搬代码5 小时前
【愚公系列】《数据可视化分析与实践》019-数据集(自定义SQL数据集)
数据库·sql·信息可视化
游乐码6 小时前
c#扩展方法
开发语言·c#
lzhdim6 小时前
SQL 入门 2:LIKE、正则、 ORDER BY 与LIMIT
数据库·sql·mysql
青衫码上行6 小时前
高频 SQL 50题(基础版)| 连接
数据库·sql·mysql
xyzhan6 小时前
SQL Server - 列出数据库中所有固定长度字段
数据库·sql·oracle·sql server