如何通过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
相关产品推荐
相关产品推荐

