Есть ли способ передать параметр в XPath NpgsqlCommand? - PullRequest
1 голос
/ 06 мая 2020

На сервере SQL я могу использовать sql:variable:

string sql = "select * from mytable where xml_column.exist('//Tag[text()=sql:variable(\"@value\")]') = 1";

Я пытался найти аналогичный способ передачи параметра в NpgsqlCommand. Этот, например, не дает сбоев, но и не возвращает никаких данных:

string sql = "select * from mytable where xmlexists('//Tag[text()=\"@value\"]' PASSING BY REF xml_column) = true";

Есть ли способ сделать это? Спасибо!

Вот фрагмент кода:

string connstr = "PORT=5432;DATABASE=mydb;HOST=myhost;USER ID=myuser;PASSWORD=mypassword";
using (NpgsqlConnection connection = new NpgsqlConnection(connstr))
{
    connection.Open();

    string sql = "select xml_column from mytable where xmlexists('//Tag[text()=\"@value\"]' PASSING BY REF xml_column) = true";
    using (var cmd = connection.CreateCommand())
    {
        cmd.CommandText = sql;
        cmd.Parameters.AddWithValue("@value", "my value");
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                reader[0].Dump();
            }
        }
    }

    connection.Close();
}

1 Ответ

0 голосов
/ 07 мая 2020

Перекрестно размещено на github, см. Ответ: https://github.com/npgsql/npgsql/issues/2946

...