You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Npgsql向PostgreSQL插入数据的查询语句错误如何修正

Npgsql插入数据代码修正说明

原有代码存在的问题

  • 直接拼接SQL字符串,存在严重的SQL注入风险,属于数据库操作的高危写法
  • VALUES子句参数拼接错误:重复拼接了3次item_count参数,缺少item_name、item_size参数,也没有正确添加逗号分隔多个值
  • 手动拼接字符串没有做转义处理,如果参数值包含单引号会直接触发SQL语法错误

修正后的代码

推荐使用Npgsql官方推荐的参数化查询方式,写法如下:

public IActionResult Create(string item_name, string item_count, string item_size)
{
    using var connection = new NpgsqlConnection(connString);
    connection.Open();
    // 使用参数占位符代替直接拼接值
    string query = @"INSERT INTO public.""items""(""item_count"", ""item_name"", ""item_size"")
                     VALUES (@item_count, @item_name, @item_size)";
    using var command = new NpgsqlCommand(query, connection);
    // 单独传入参数,Npgsql会自动处理类型转换、特殊字符转义、防注入逻辑
    command.Parameters.AddWithValue("item_count", item_count);
    command.Parameters.AddWithValue("item_name", item_name);
    command.Parameters.AddWithValue("item_size", item_size);
    int result = command.ExecuteNonQuery();

    if (result < 0)
    {
        return Error();
    }
    return View(nameof(Create));
}

调整说明

  • 改用参数化查询写法,完全规避SQL注入风险
  • 补全了三个插入参数,占位符和字段顺序一一对应
  • 不需要手动处理参数的引号、转义逻辑,避免语法错误
  • 如果item_count是数值类型字段,建议先把入参转换为对应int/long类型再传入AddWithValue,避免类型不匹配的问题

内容的提问来源于stack exchange,提问作者preethi narayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:54:02