как заставить предложение LIKE работать в ADO.NET и SQL Server - PullRequest
9 голосов
/ 07 апреля 2010

Я делаю действительно простой запрос в ASP.NET, но после того, как я вставил предложение LIKE, оно перестает работать.

Пример:

String sql = " SELECT * 
                 FROM Products 
                WHERE ID = @MYID 
                  AND Name LIKE '%@MYNAME%' ";
SqlCommand command = new SqlCommand(sql, cn);


command.Parameters.AddWithValue("@MYID", MYID.Text);

command.Parameters.AddWithValue("@MYNAME", MYNAME.Text);

Если я удалил LIKE, это сработает. Следовательно, я думаю, что это связано с кавычками?

Ответы [ 6 ]

28 голосов
/ 07 апреля 2010

Исходный код путает текст оператора SQL с содержимым параметра. Ваш код должен выглядеть примерно так:

string sql = "SELECT * 
              FROM Products 
              WHERE ID = @MyID
              AND Name LIKE @MyName";
using (SqlCommand command = new SqlCommand(sql, cn))
{
    command.Parameters.AddWithValue("@MyID", MyID.Text);
    command.Parameters.AddWithValue("@MyName", "%" + MyName.Text + "%");
    // Etc.
}

Знаки % должны быть частью значения параметра, и вам не нужны одинарные кавычки при использовании параметров привязки.

1 голос
/ 07 апреля 2010

Просто замечание о том, что использование LIKE с начальным подстановочным знаком почти всегда является очень плохой идеей , потому что запрос не будет использовать индексы для этого столбца.В этом случае вы, вероятно, можете сойти с рук, потому что похоже, что фильтр в столбце ID ограничит вас одной записью, но обычно вместо этого нужно поместить полнотекстовый индекс в столбец имени и написать запрос следующим образом.это:

... WHERE CONTAINS(name, @MyName)
0 голосов
/ 03 февраля 2014

Не думайте, что использование параметра связывания похоже на вставку его значения в строку SQL!Значения параметров привязки отправляются в БД как отдельные данные, поэтому они не должны быть в кавычках, и при этом они не могут содержать никаких дополнительных кодов SQL, имен таблиц или столбцов!

0 голосов
/ 27 апреля 2011

вы пропускаете знак % при передаче значения параметра

command.Parameters.AddWithValue("@MYNAME"+"%", MYNAME.Text);
0 голосов
/ 07 апреля 2010

Или

 String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE @MYNAME ";

и когда вы установите параметр @MYNAME, добавьте символы «%» соответственно (% SMITH%). Я не думаю, что вам нужны одинарные кавычки при работе с параметрами.

0 голосов
/ 07 апреля 2010

Оператор sql должен выглядеть следующим образом:

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + @MYNAME + '%'"; 

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

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + text_box.Text + '%'";

"text_box" будет фактическим идентификатором вашего элемента управления textBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...