Сообщение подготовлено оператором Postgres при установке значения параметра в одинарную кавычку - PullRequest
0 голосов
/ 12 ноября 2018

Я использую параметризованный запрос к базе данных Postgres в C #.

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 голосов
/ 12 ноября 2018

Таким способом нельзя использовать заполнители параметров внутри литералов. Вместо записи interval '@param' просто напишите @param: Npgsql передает информацию о типе в PostgreSQL в протоколе с параметром. В некоторых случаях вам может потребоваться указать NpgsqlDbType в вашем параметре, чтобы указать Npgsql, какой тип отправлять (но в большинстве случаев он выводится правильно из типа CLR).

...