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; }
错误原因分析
- 清空搜索栏报错:当搜索文本为空时,RowFilter拼接后变为
(Name LIKE'%%') OR (Surname LIKE'%%') OR (Chamber =),Chamber =缺少右操作数,触发语法错误。 - 输入字符报错:
- 原代码中,输入字符(如
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
相关产品推荐
相关产品推荐

