2012-12-19 2 views
7

У меня есть postgresql DB, и я хочу запросить таблицу «Locations», чтобы получить имена всех мест, которые соответствуют имени, введенному пользователем. Имя столбца - «LocationName». Я использую ASP.net с C#.как заявление для npgsql с использованием параметра

NpgsqlConnection con = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ToString()); 

NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE \"%@loc_name%\"", con); 

cmd.Parameters.AddWithValue("@loc_name", Location_Name); 

NpgsqlDataReader reader = cmd.ExecuteReader(); 

Я получаю это исключение:

Npgsql.NpgsqlException: ERROR: 42703: column "%((E'My place'))%" does not exist 

Я пытался запустить запрос без использования%, но это не работает. Я также попытался с помощью + и &, как приведено ниже, но это не сработало:

string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%'+ :loc_name +'%'"; 

с предыдущей строки, я получаю это исключение:

Npgsql.NpgsqlException: ERROR: 42725: operator is not unique: unknown + unknown 
+0

Для последнего запроса: postgres использует оператор || для конкатенации строк, а не плюс (+). – alfoks

ответ

12

вы должны использовать

NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE @loc_name", con); 
cmd.Parameters.AddWithValue("@loc_name", "%" + Location_Name + "%"); 

Вы вставляете слишком много цитат: Postgre интерпретирует строку между двойной кавычкой как поле/имя-таблицы. Пусть параметр выполняет задание escape-строки

P.S .: Чтобы объединить строку в Postgre, вы должны использовать оператор ||, см. here. Таким образом, ваш последний запрос должен быть

string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%' || :loc_name || '%'"; 
+0

Это сработало !! Теперь он возвращает все соответствующие строки. Спасибо @trippino за помощь и за такой быстрый ответ. – Namrata

+0

Рад помочь вам. Добро пожаловать в переполнение стека :) –

Смежные вопросы