首页 > 解决方案 > 使用 C# npgsql 转义 SQL 查询的许多值

问题描述

给定 SQL 查询示例,例如下面的一个和 C# npgsql lib/driver,如果您希望将值转换为可用于组装最终 SQL 的字符串(转义 SQL 值),您会建议如何构建最终 SQL 查询无需担心 SQL 注入。

样本查询

INSERT INTO table1 (col1, col2, col3) VALUES
 (12, 'aaa', '2020-04-06T12:00Z')
,(13, 'bbb', '2020-04-06T12:01Z')
,(14, 'ccc', '2020-04-06T12:02Z')
-- ... (typically few dozens, max few thousands rows to upsert)
ON CONFLICT ON CONSTRAINT table1_pkey DO UPDATE SET col2 = EXCLUDED.col2, col3 = EXCLUDED.col3;

对于包含多行的查询(VALUES 和 ON CONFLICT 之间的部分),可以使用带有命名参数的 NpgsqlCommandBuilder。但是在这种情况下,命名参数的数量可能会非常高,并且无论如何都必须动态创建原始模板。因此,我正在寻找具有此签名的接近伪方法的东西:

string PgsqlEscape<T>(T value);
PgsqlEscape("aaa") == "'aaa'"
PgsqlEscape(DateTimeOffset.UtcNow) == "'2020-04-06T12:01:45.784Z'"
PgsqlEscape(false) == "false"

标签: c#npgsql

解决方案


推荐阅读