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

VB.NET中使用Dapper操作MS-Access时文本框搜索失效问题排查

你的代码存在以下几个关键问题
  • 参数添加逻辑错误:DynamicParameters.Add的第一个参数应该是参数名称,而非完整的SQL条件语句。你当前把WHERE子句内容当成参数名传入,完全不符合Dapper的参数绑定规则。
  • SQL语句未关联搜索条件:调用Query方法时传入的是固定SQL Select ContactID,Nme,Mobile,Address from contact,根本没用到你试图添加的搜索逻辑,自然不会产生筛选效果。
  • Access通配符使用错误:MS Access的LIKE语法通配符是*,而非SQL Server常用的%,用%无法在Access中实现模糊匹配。
  • 条件逻辑构建错误:你想要的“空文本时查全部、有值时模糊匹配”逻辑,应该通过动态拼接SQL+绑定参数实现,而非把条件塞进参数里。

修正后的示例代码

Private Sub FillDataGridView()
    Dim searchText As String = txtSearch.Text.Trim()
    ' 动态构建SQL:空文本查全部,有值则添加模糊匹配条件
    Dim sql As String = If(String.IsNullOrEmpty(searchText),
                          "Select ContactID,Nme,Mobile,Address from contact",
                          "Select ContactID,Nme,Mobile,Address from contact WHERE Nme LIKE @SearchText")
    
    Dim param As New DynamicParameters()
    ' 仅当搜索文本非空时绑定参数,使用Access兼容的通配符*
    If Not String.IsNullOrEmpty(searchText) Then
        param.Add("@SearchText", $"*{searchText}*")
    End If

    Dim list As List(Of Contact) = oledbCon.Query(Of Contact)(sql, param, commandType:=CommandType.Text).ToList()

    dgvContact.DataSource = list
    dgvContact.Columns(0).Visible = False
End Sub

Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click
    If Not Me.btnSearch.IsHandleCreated Then Return
    Try
        FillDataGridView()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

额外说明

  • Dapper通过@参数名关联SQL占位符与参数值,参数名称必须和SQL中的占位符完全一致。
  • 如果需要跨数据库兼容通配符,可以根据数据库类型动态替换,但Access环境下固定使用*即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:35:22