Подобное SQL выражение дает пустой результат

#c# #sql #sql-server #sql-like

#c# #sql #sql-сервер #sql-подобное

Вопрос:

Похоже, что использование Like требует некоторого точного форматирования, о котором я не знаю. Это код:

 private void DoFilter()
{
    using (connection = new SqlConnection(connectionString))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers WHERE CompanyName = @filter   '%'", connection))
    {
        adapter.SelectCommand.Parameters.AddWithValue("@filter", txtFilter.Text.Trim());

        DataTable TCustomers = new DataTable();
        adapter.Fill(TCustomers);

        lstCustomers.DisplayMember = "CompanyName";
        lstCustomers.ValueMember = "Id";
        lstCustomers.DataSource = TCustomers;

    }
}
  

Код не выдает никакой ошибки. Оно просто оставляет поле списка (lstCustomers) пустым. (txtFilter — это текстовое поле, в котором находится строка фильтра).

Комментарии:

1. Для реальной работы like вам нужен оператор like .

2. В дополнение к LIKE , избегайте использования AddWithValue . Используйте типы параметров строгого типа с максимальной длиной строки для повышения производительности и содействия повторному использованию кэша.

Ответ №1:

используйте like operator вместо =

 SELECT * FROM Customers WHERE CompanyName like @filter   '%'"
  

Ответ №2:

Вы используете не LIKE оператор, вы используете = operator .

Это должно быть:

 using (SqlDataAdapter adapter = new SqlDataAdapter(
    "SELECT * FROM Customers WHERE CompanyName LIKE @filter   '%'", connection))
  

То, как вы его написали, SQL будет соответствовать точной строке с % в конце, и, следовательно, вы не получите никаких результатов.

Ответ №3:

‘Like’ следует использовать как (ВЫБЕРИТЕ * ИЗ списка клиентов, ГДЕ название компании ПОХОЖЕ НА @filter ‘%’):

 private void DoFilter()
{
    using (connection = new SqlConnection(connectionString))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers WHERE CompanyName LIKE @filter   '%'", connection))
    {
        adapter.SelectCommand.Parameters.AddWithValue("@filter", txtFilter.Text.Trim());

        DataTable TCustomers = new DataTable();
        adapter.Fill(TCustomers);

        lstCustomers.DisplayMember = "CompanyName";
        lstCustomers.ValueMember = "Id";
        lstCustomers.DataSource = TCustomers;

    }
}