Передача параметров C # в блок Postgres Npgsqlcommand DO - PullRequest
0 голосов
/ 30 августа 2018

Я получаю сообщение об ошибке «42883: оператор не существует: целое число = @ целое число» Npgsql.PostgresException при попытке передать параметры в блок DO:

var cmd = new NpgsqlCommand();
cmd.CommandText = 
@"DO $$ 
BEGIN
IF EXISTS (SELECT id FROM pub.table1 WHERE id = @id) THEN
    UPDATE pub.table1 
    SET Field1 = @Field1
       ,Field2 = @Field2
    WHERE id = @id;
ELSE
    INSERT INTO pub.table1 (id, Field1, Field2) 
    VALUES (@id, @Field1, @Field2);
END IF;

END $$;";

cmd.Parameters.AddWithValue("@id", 1);
cmd.Parameters.AddWithValue("@Field1", "text");
cmd.Parameters.AddWithValue("@Field2", "text2");

В противном случае подключение к postgres работает, а также (классические) запросы работают при передаче параметров; e.g.:

cmd.CommandText = @"SELECT * FROM pub.table1 WHERE id = @id;";

Не возможно ли передать параметры в блок "DO" или я что-то упустил?

Спасибо. M

...