2015-03-30 2 views
1

Я пытаюсь параметризовать свои SQL-выражения, но у меня возникают некоторые проблемы с оператором LIKE. Я пробовал разные решения, но ничего не работает. Мой код:Использование параметризованных SQL-запросов LIKE

sqlCmd = new SqlCommand("SELECT " + form1.cusId.Text + "," + form1.cusName.Text" FROM " + form1.getTable() + " WHERE " + form1.getCusId() + " LIKE @filterCustomers", connection); 
sqlCmd.Parameters.AddWithValue("@filterCustomers", form1.filterCus().Trim() + "%"); 

Я получаю

"должны объявить скалярную переменную @filterCustomers".

Почему это происходит? Так как это е общее решение ...

+0

Вы, кажется, инъекционные материал в ваша строка SQL повсюду, поэтому я не уверен, что вы пожинаете любое из основных преимуществ параметризованных запросов. –

+0

Каково значение 'form1.filterCus(). Trim()' точно? Отлаживайте свой код и рассказывайте нам. И так как вы хотите динамически получать имена таблиц и столбцов, я надеюсь, что вы создадите для них сильную проверку или черный список. –

+1

Возможный дубликат [Howto? Параметры и инструкция LIKE SQL] (http://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql) –

ответ

0

Что делать, если вы пытаетесь

sqlCmd.Parameters.Add("@filterCustomers",SqlDbType.VarChar,8).Value = form1.filterCus().Trim() + "%"; 

Вместо:

sqlCmd.Parameters.AddWithValue("@filterCustomers", form1.filterCus().Trim() + "%"); 

Вы можете изменить .VarChar для какого типа вы данные и 8 для требуемая максимальная длина поля или полностью удалить ,8 без ограничений в пределах длины параметра

+0

Какая разница? Если код OP не будет работать с его переменными, ваш код не будет работать ни на мой взгляд. –

+0

Я получаю такое же сообщение об ошибке :(Когда я делаю это с не параметризованными значениями, тогда он работает нормально –

+0

@ScorpX Какой 'form1 .filterCus() .Tim() 'возвращает точно? И каковы имена вашей таблицы и столбцов? И ваши типы столбцов? –

0

вам необходимо поместить свою строку внутрь Ingle цитирует ':

...+" LIKE '"+ form1.filterCus().Trim()+"%'", connection); 

если вы не беспокоиться о SQL Injection

EDIT: вы можете также использовать динамический SQL:

sqlCmd = new SqlCommand("EXEC ('SELECT..... WHERE FIELD LIKE ''' + @filterCustomers + '%''')", connection); 
sqlCmd.Parameters.AddWithValue("@filterCustomers", form1.filterCus().Trim() + "%"); 
+0

Думаю, вы сделали небольшой ошибка с вашим awnser с «LIKE @filterCustomers», соединение); «неожиданно появилось что-то более добавленное за значением' LIKE' statment – maam27

+0

Когда я пытаюсь это, он ничего не возвращает, когда я ищу элемент. –

+0

@Scorp, потому что вы пропускаете параметр неправильно – jfun

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