You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ComboBox与TextBox的两个值在DataGridView中实现多条件搜索?

解决思路与修复方案

一、先修复致命的SQL注入问题

你当前的代码直接拼接用户输入到SQL语句中,不仅会导致输入含特殊字符(比如单引号)时SQL报错,还存在极高的SQL注入风险,必须改用参数化查询,这是规范写法:

else if (!string.IsNullOrEmpty(comboBox1.Text) && !string.IsNullOrEmpty(textBox2.Text))
{
    // 使用参数占位符,避免拼接字符串
    string sql = "SELECT * FROM vPurchist_50M_CreditLine_Combined WHERE DEALER LIKE @Dealer AND Company_Code LIKE @CompanyCode";
    SqlDataAdapter ada = new SqlDataAdapter(sql, sqlCon);
    
    // 绑定参数,自动处理特殊字符
    ada.SelectCommand.Parameters.AddWithValue("@Dealer", comboBox1.Text.Trim() + "%");
    ada.SelectCommand.Parameters.AddWithValue("@CompanyCode", textBox2.Text.Trim() + "%");
    
    ada.Fill(dtbl);
}

二、排查匹配逻辑问题

如果用AND/OR仍得不到预期结果,按以下步骤排查:

1. 确认运算符逻辑是否符合需求

  • AND:必须同时满足DEALER匹配输入且Company_Code匹配输入,只有双条件都符合的记录才会被返回。
  • OR:只要DEALER匹配或Company_Code匹配任意一个条件,记录就会被返回。
    先明确你的业务需求,再选择对应运算符。

2. 处理大小写与空格问题

  • 大小写不匹配:SQL Server默认部分排序规则区分大小写,比如Dealer001和dealer001会被判定为不同值。可以修改查询忽略大小写:
    SELECT * FROM vPurchist_50M_CreditLine_Combined 
    WHERE LOWER(DEALER) LIKE LOWER(@Dealer) 
      AND LOWER(Company_Code) LIKE LOWER(@CompanyCode)
    
  • 多余空格:输入框内容或数据库字段值可能带前后空格,在绑定参数前先去除输入的空格:
    ada.SelectCommand.Parameters.AddWithValue("@Dealer", comboBox1.Text.Trim() + "%");
    ada.SelectCommand.Parameters.AddWithValue("@CompanyCode", textBox2.Text.Trim() + "%");
    

3. 验证SQL语句本身

把参数代入SQL,直接在数据库管理工具(比如SSMS)中执行,看是否能得到预期结果。比如输入是DealerA和Comp001,执行:

SELECT * FROM vPurchist_50M_CreditLine_Combined WHERE DEALER LIKE 'DealerA%' AND Company_Code LIKE 'Comp001%'

如果直接执行也没结果,说明是数据本身不存在匹配项,不是代码逻辑问题。

内容的提问来源于stack exchange,提问作者Corban Guerrero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:34:52