在单引号中设置参数值的Postgres准备语句错误

时间:2018-11-12 08:34:40

标签: c# postgresql npgsql

我正在对C#中的Postgres数据库使用参数化查询。

NpgsqlCommand command = new NpgsqlCommand("(SELECT * " +
    "FROM ABC AS abc " +
    " WHERE abc.SomeDate >= date_trunc('month', current_date) + interval '@periods' ");

command.Parameters.AddWithValue("periods", NpgsqlDbType.Text, periods);

其中期间值格式=“-5年”或“ -2年”

执行错误是

22007: invalid input syntax for type interval: "@periods"

当我从@periods中删除'(单引号)时,出现错误:

Error: 42601: syntax error at or near "$2"

请提出一种方法。谢谢。

1 个答案:

答案 0 :(得分:1)

您不能以这种方式在文字中使用参数占位符。无需编写interval '@param',而只需编写@param:Npgsql使用协议将类型信息通过协议传输到PostgreSQL。在某些情况下,您可能需要在参数上指定NpgsqlDbType来告诉Npgsql发送哪种类型(但在大多数情况下,可以从CLR类型正确推断出该类型)。