VB.NET中通过TextBox检索Excel数据并显示于DataGridView的问题
实现TextBox输入筛选Excel数据到DataGridView
我明白你的需求啦——现在你能把Excel里的所有数据都读到DataGridView,但想要实现根据TextBox输入的内容筛选匹配记录对吧?咱们一步步来改代码就行~
问题根源
你当前的代码没有添加筛选条件,执行的是SELECT * FROM [Sheet1$]这类查询,所以会返回全部记录。要实现检索,只需要给SQL语句加上WHERE子句,匹配TextBox的输入值即可。
完整解决方案代码
我给你写了带注释的完整代码,你可以放到按钮的点击事件(或者TextBox的文本变更事件,实现实时筛选)里:
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click ' 1. 配置Excel连接字符串 ' 注意:如果是.xls格式,把Extended Properties改成'Excel 8.0;HDR=YES;' Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\MECH_1.xlsx';Extended Properties='Excel 12.0 Xml;HDR=YES;'" ' 2. 构建带参数的SQL查询 ' 把【你的目标列名】替换成你要匹配的Excel列名(比如"零件名称"、"编号") ' 如果要匹配多列,可以写成:WHERE 列1 LIKE @SearchText OR 列2 LIKE @SearchText Dim sqlQuery As String = "SELECT * FROM [Sheet1$] WHERE 你的目标列名 LIKE @SearchText" ' 使用Using语句自动释放资源,避免内存泄漏 Using myConnection As New OleDb.OleDbConnection(connectionString) Using myCommand As New OleDb.OleDbCommand(sqlQuery, myConnection) ' 3. 添加查询参数(一定要用参数化查询,避免SQL注入和特殊字符问题) ' 前后加%是实现模糊匹配,比如输入"螺丝"会匹配所有包含"螺丝"的记录 ' 如果要精确匹配,就去掉前后的%,写成 txtSearch.Text 即可 myCommand.Parameters.AddWithValue("@SearchText", "%" & txtSearch.Text & "%") Using dataAdapter As New OleDb.OleDbDataAdapter(myCommand) Dim dataSet As New DataSet() ' 执行查询并填充数据集 dataAdapter.Fill(dataSet) ' 4. 将筛选后的结果绑定到DataGridView DataGridView1.DataSource = dataSet.Tables(0) End Using End Using End Using End Sub
关键细节说明
- 参数化查询:别直接把TextBox的内容拼到SQL里!用
@SearchText参数可以避免SQL注入,还能处理输入里的单引号这类特殊字符。 - 模糊匹配 vs 精确匹配:如果需要精确匹配(比如输入的内容必须和Excel里的记录完全一致),就把参数值改成
txtSearch.Text,去掉前后的%。 - 实时筛选:如果想在用户输入时就自动更新DataGridView,把上面的代码放到
txtSearch_TextChanged事件里就行。 - 驱动兼容性:确保你的电脑安装了Microsoft Access Database Engine(ACE驱动),32位程序要装32位驱动,64位程序装64位驱动,否则会报错。
- Excel路径与权限:尽量别把Excel文件放到C盘根目录,可能会有权限问题,建议放到用户文档目录下。
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

