SQL LIKE 表达式给出空结果

SQL LIKE expression gives empty result

似乎使用 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,过滤字符串在里面)

使用like operator代替=

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

您没有使用 LIKE 运算符,您使用的是 = 运算符。

应该是:

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

按照您编写的方式,SQL 将匹配末尾带有 % 的精确字符串,因此您不会得到任何结果。

'Like' 应用作 (SELECT * FROM Customers WHERE 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;

    }
}