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

VB.NET中Form2的DataGridView无法通过Dapper+Access填充问题求助

排查Dapper操作Access时Getitem2方法导致DataGridView无数据的问题

1. 检查Getitem2的SQL语句有效性

  • 确认SQL语法是否符合Access规范:Access用*作为通配符(而非SQL Server的%),日期字段需用#包裹,表名/字段名不能有拼写错误。
  • 直接在Access软件中执行Getitem2的SQL语句,验证是否能返回数据。如果Access内查询无结果,问题根源在SQL本身。

2. 验证Getitem2的返回值

  • DataGridView仅支持绑定List<T>、DataTable或实现IEnumerable的集合。对比Getitem和Getitem2的返回类型:
    • 检查Getitem2是否返回空集合或null;
    • 若Getitem返回强类型集合,确认Getitem2的模型类是否正确实现。

3. 排查参数传递(若Getitem2带参数)

  • Access中Dapper的参数占位符用?,或确保参数名与SQL中的占位符完全匹配:
    ' 错误示例:参数名不匹配
    conn.Query(Of ItemModel)("SELECT * FROM Goods WHERE Id = @GoodsId", New With {.Id = 1})
    ' 正确示例:参数名对应
    conn.Query(Of ItemModel)("SELECT * FROM Goods WHERE Id = @GoodsId", New With {.GoodsId = 1})
    
  • 检查参数值类型是否匹配,比如避免将字符串类型传入数字字段。

4. 确认连接字符串一致性

  • 对比Getitem和Getitem2使用的数据库连接字符串,确保两者连接的是同一个Access文件,排除因连接不同数据库导致的空结果。

5. 检查模型类属性映射

  • 若使用强类型模型,确认Getitem2的模型类属性与查询返回的字段名一致(大小写不敏感,但名称需完全匹配)。字段名不匹配时,需用特性显式映射:
    Public Class ItemModel
        <Column("GoodsName")>
        Public Property Name As String
    End Class
    

6. 调试返回结果与DataGridView绑定

  • 在绑定数据源前添加调试代码,确认Getitem2的返回数据量:
    Dim result = Getitem2()
    Debug.WriteLine($"Getitem2返回数据条数:{result.Count}")
    
  • 若返回有数据但DataGridView不显示,检查列设置:是否列名与模型属性不匹配,或列被设置为隐藏。绑定代码需确保正确:
    DataGridView1.DataSource = result
    ' 若返回IEnumerable,可转为DataTable尝试绑定
    ' DataGridView1.DataSource = result.CopyToDataTable()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:09