我正在对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"
请提出一种方法。谢谢。
答案 0 :(得分:1)
您不能以这种方式在文字中使用参数占位符。无需编写interval '@param'
,而只需编写@param
:Npgsql使用协议将类型信息通过协议传输到PostgreSQL。在某些情况下,您可能需要在参数上指定NpgsqlDbType来告诉Npgsql发送哪种类型(但在大多数情况下,可以从CLR类型正确推断出该类型)。