Выражение SQL LIKE дает пустой результат - PullRequest
0 голосов
/ 14 марта 2019

Кажется, что использование 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;

    }
}

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

Ответы [ 3 ]

4 голосов
/ 14 марта 2019

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

SELECT * FROM Customers WHERE CompanyName like @filter + '%'"
0 голосов
/ 14 марта 2019

«Нравится» следует использовать как (ВЫБЕРИТЕ * ОТ ПОКУПАТЕЛЕЙ, ГДЕ CompanyName 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;

    }
}
0 голосов
/ 14 марта 2019

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

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

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

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

...