оператор для npgsql с использованием параметра

1

Я передаю параметры в sql-запросе с помощью драйвера npgsql:

SqlCommand = new NpgsqlCommand();
....
SqlCommand.CommandText = "SELECT id,name FROM table1 WHERE field1=:param2 ORDER BY name;";
SqlCommand.Parameters.AddWithValue("param2", 1);

Этот запрос выполнен правильно и выдает необходимые данные, но как только я добавлю параметр в sql в разделе "select",

SqlCommand.CommandText = "SELECT id,name :param1 FROM table1 WHERE field1=:param2 ORDER BY name;";
SqlCommand.Parameters.AddWithValue("param1", ",field1");
SqlCommand.Parameters.AddWithValue("param2", 1);

это дает мне какую-то глупость. Теоретически этот запрос на сервер должен рассматриваться как

SELECT id,name,field1 FROM table1 WHERE field1=1 ORDER BY name;

но этого не произошло. Возникает вопрос: существует ли способ динамически вставлять список полей, используя такие параметры?

  • 0
    Это не то, как параметризованные запросы работают вообще, в любой базе данных, которая их поддерживает (вместо того, чтобы подделывать их). Они представляют значения , а не подстановки строк. Если вы поместили параметр в SELECT вы должны вернуть значение параметра
Теги:
npgsql

2 ответа

1

К сожалению, Npgsql не поддерживает то, что вы пытаетесь сделать. Значения NpgsqlParameter должны использоваться только как значения параметров в предложении where. Чтобы добавить имена полей динамически, как вы планируете, вам нужно будет создать запрос вручную, используя конкатенацию строк.

Я надеюсь, что это помогает.

  • 0
    Каков рекомендуемый способ добавления динамических значений без риска внедрения SQL? Например, как бы я добавил динамическое значение в вызове функции, который не имеет предложения WHERE?
  • 1
    @SteveGlick использует LINQ и ORM или microORM для генерации оператора или очень, очень, очень осторожно при построении запроса, например, генерирует только SELECT после проверки того, что предоставленные значения на самом деле являются полями таблицы.
-1

Перепишите команду CommandText и добавьте следующее:

foreach (NpgsqlParameter item in _Command.Parameters)
{
    comm.Parameters.AddWithValue(item.ParameterName, item.Value);
}

И решить вашу проблему..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню