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

Access数据库多条件搜索框报错:SyntaxErrorException与EvaluateException

Access数据库多条件搜索栏异常问题解决

问题概况

制作针对Access数据库表的多条件搜索栏,涉及三个字段:Name(文本)、Surname(文本)、Chamber(长整型数字)。出现以下异常:

  • 输入数字时搜索功能正常
  • 清空搜索栏抛出System.Data.SyntaxErrorException:Syntax error: Missing operand after '=' operator.
  • 输入字符时抛出System.Data.EvaluateException:Cannot find column [a].

原实现代码:

private void ResSearchtextBox_TextChanged(object sender, EventArgs e)
{
    DataView dv = dt.DefaultView;
    dv.RowFilter = "(Name LIKE'%" + ResSearch_textBox.Text + "%') OR (Surname LIKE'%" + ResSearch_textBox.Text + "%') OR (Chamber =" + ResSearch_textBox.Text + ")";
    ResDGV.DataSource = dv;
}

尝试修改后的代码:

private void ResSearchtextBox_TextChanged(object sender, EventArgs e)
{
    DataView dv = dt.DefaultView;
    dv.RowFilter = "(Name LIKE'%" + ResSearch_textBox.Text + "%') OR (Surname LIKE'%" + ResSearch_textBox.Text + "%') OR (Chamber ='" + ResSearch_textBox.Text + "')";
    ResDGV.DataSource = dv;
}

错误原因分析

  1. 清空搜索栏报错:当搜索文本为空时,RowFilter拼接后变为(Name LIKE'%%') OR (Surname LIKE'%%') OR (Chamber =),Chamber =缺少右操作数,触发语法错误。
  2. 输入字符报错:
    • 原代码中,输入字符(如a)会生成Chamber =a,DataView会将a识别为列名而非值,因此抛出找不到列的异常。
    • 尝试的代码给Chamber的值加了单引号,生成Chamber ='a',但Chamber是数字类型,字符串无法转换为数字,仍会引发类型不匹配的异常。

修复代码

private void ResSearchtextBox_TextChanged(object sender, EventArgs e)
{
    DataView dv = dt.DefaultView;
    string searchText = ResSearch_textBox.Text.Trim();
    
    if (string.IsNullOrEmpty(searchText))
    {
        // 清空搜索栏时,显示所有数据
        dv.RowFilter = string.Empty;
        ResDGV.DataSource = dv;
        return;
    }

    // 构建文本字段的模糊搜索条件
    string textFilter = $"Name LIKE '%{searchText}%' OR Surname LIKE '%{searchText}%'";
    string chamberFilter = string.Empty;

    // 判断输入是否为有效长整型数字,是则添加Chamber的搜索条件
    if (long.TryParse(searchText, out long chamberValue))
    {
        chamberFilter = $" OR Chamber = {chamberValue}";
    }

    // 组合最终的过滤条件
    dv.RowFilter = textFilter + chamberFilter;
    ResDGV.DataSource = dv;
}

修复说明

  • 先处理搜索文本为空的场景,直接清空RowFilter,避免语法错误。
  • 对Chamber字段,通过long.TryParse验证输入是否为有效数字,仅当输入是数字时才加入该字段的搜索条件,避免类型不匹配或列名识别错误。
  • 拆分条件构建逻辑,提升代码可读性和稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:35:54