使用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
相关产品推荐
相关产品推荐

