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

如何在数据库查询中使用OR输出结果?姓名搜索失效问题排查

嘿,我看到你在使用OR进行数据库查询时遇到了问题,咱们来一步步解决它~

问题根源:SQL条件语法错误

你当前的SQL语句写法有问题:

select * from patient where firstname OR lastname = '" + txtSearch.Text + "'

MySQL会把这个条件解析成:判断firstname字段是否为“真”(非空、非0值),或者lastname等于输入内容。这显然不是你想要的“搜索firstname或lastname等于输入值”的逻辑,所以当你搜索firstname时,大部分情况下firstname字段的布尔转换结果为假,自然查不到数据。

正确的SQL写法

你需要给OR两边都写上完整的比较条件,同时为了避免SQL注入风险,推荐使用参数化查询(不要直接拼接用户输入到SQL语句里):

private void search_Click(object sender, EventArgs e)
{
    try
    {
        // 正确的OR条件逻辑 + 参数化查询
        string sql = "select * from patient where firstname = @SearchText OR lastname = @SearchText";
        MySqlDataAdapter ada = new MySqlDataAdapter(sql, con);
        
        // 添加参数,替代直接拼接字符串
        ada.SelectCommand.Parameters.AddWithValue("@SearchText", txtSearch.Text);
        
        DataTable dt = new DataTable();
        ada.Fill(dt);
        dataGridView1.DataSource = dt;
        label2.Text = dataGridView1.RowCount.ToString();
        // 你后续的代码...
    }
    catch (Exception ex)
    {
        // 记得捕获异常,方便排查问题
        MessageBox.Show("查询出错:" + ex.Message);
    }
}

额外优化建议

  • 如果需要不区分大小写的搜索,可以用LOWER()函数统一转换:
    select * from patient where LOWER(firstname) = LOWER(@SearchText) OR LOWER(lastname) = LOWER(@SearchText)
    
  • 检查firstname字段是否真的存在对应数据,比如有没有拼写错误、字段值为空的情况,这些也可能导致查询无结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:14:34