VB.NET中DataGridView关联Access数据库搜索问题求助
解决DataGridView查询Access数据库的问题
首先,咱们先理清楚你代码里的几个关键问题:
DataGridView2.TextLength完全用错了!DataGridView控件根本没有TextLength这个属性,这个属性是TextBox独有的。你真正需要的是从DataGridView1的Column1里获取用户输入的查询值。- 逻辑搞反了:你要把查询结果显示在DataGridView2里,但你的代码却把结果绑定给了DataGridView1。
- 直接拼接SQL字符串存在严重的SQL注入风险,必须用参数化查询来避免。
下面是修正后的完整实现方案:
步骤1:获取DataGridView1的输入值
首先要确保用户在DataGridView1的Column1中输入了内容,我们可以获取当前行的对应单元格值:
' 获取DataGridView1当前行Column1的值 Dim searchValue As String = If(DataGridView1.CurrentRow?.Cells("Column1").Value?.ToString(), "") If String.IsNullOrEmpty(searchValue) Then MessageBox.Show("请在DataGridView1的Column1中输入查询值!") Return End If
步骤2:使用参数化查询执行数据库查询
这里用OleDb连接Access数据库,用参数化查询来构建SQL,避免注入:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 1. 获取查询值 Dim searchValue As String = If(DataGridView1.CurrentRow?.Cells("Column1").Value?.ToString(), "") If String.IsNullOrEmpty(searchValue) Then MessageBox.Show("请在DataGridView1的Column1中输入查询值!") Return End If ' 2. 构建数据库连接和查询命令(参数化) Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=你的Access数据库路径.accdb;" Dim sqlQuery As String = "SELECT * FROM Query1 WHERE Tracking LIKE ?" Using conn As New OleDb.OleDbConnection(connectionString) Using cmd As New OleDb.OleDbCommand(sqlQuery, conn) ' 添加参数,注意Access的参数占位符是?,参数值要包含通配符%(如果需要模糊查询) cmd.Parameters.AddWithValue("@Tracking", "%" & searchValue & "%") ' 3. 执行查询并绑定到DataGridView2 Dim adapter As New OleDb.OleDbDataAdapter(cmd) Dim resultDataSet As New DataSet() adapter.Fill(resultDataSet, "Query1") ' 绑定结果到DataGridView2 DataGridView2.DataSource = resultDataSet.Tables("Query1") End Using End Using End Sub
关键说明:
- 如果你的查询是精确匹配而不是模糊查询,把参数值改成
searchValue即可,去掉前后的%。 - 确保替换
connectionString中的数据库路径为你实际的Access文件路径。 Using语句会自动释放数据库连接资源,避免内存泄漏。- 用
CurrentRow获取当前输入的行,如果你的DataGridView允许多行输入,可能需要调整逻辑(比如遍历所有行的Column1值进行查询)。
内容的提问来源于stack exchange,提问作者Thang Dang
相关产品推荐
相关产品推荐

