为了账号安全,请及时绑定邮箱和手机立即绑定

SQL LIKE 表达式给出空结果

SQL LIKE 表达式给出空结果

C#
宝慕林4294392 2022-10-23 15:35:27
似乎使用 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 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

使用like operator而不是=

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


查看完整回答
反对 回复 2022-10-23
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

'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;


    }

}


查看完整回答
反对 回复 2022-10-23
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您不是在使用LIKE运算符,而是在使用=运算符。

它应该是:

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

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



查看完整回答
反对 回复 2022-10-23
  • 3 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号