как заставить оператор LIKE работать в ADO.NET и SQL Server

Я делаю действительно простой запрос в 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);

Если я удалил ПОДОБНОЕ, это работает. Следовательно я думаю, что делает с '' кавычками?

9
задан John Saunders 10 April 2010 в 21:24
поделиться

4 ответа

Оператор 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.

-13
ответ дан 4 December 2019 в 12:17
поделиться

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

... WHERE CONTAINS(name, @MyName)
1
ответ дан 4 December 2019 в 12:17
поделиться

Или

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

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

0
ответ дан 4 December 2019 в 12:17
поделиться

Исходный код путает текст оператора 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.
}

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

30
ответ дан 4 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: