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

VB.NET 点击刷新按钮刷新MS Access绑定DataGridView时数据重复问题求助

数据重复翻倍问题根因
  • 全局声明的DataSet未在每次刷新前清空缓存数据,OleDbDataAdapter.Fill方法在目标表已存在时,默认会向表中追加查询到的全量数据,而非替换原有内容,每点击一次刷新就会把SWOT表的全量数据重复写入一次,最终数据量线性翻倍。
  • 绑定数据源时使用tables(0)索引匹配表,而非实际填充的SWOT_Report表名,存在表顺序错位、绑定异常的潜在风险。
可直接运行的修复代码
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
    Refreshdata()
End Sub

' 集中管理连接字符串,后续数据库路径调整时只需要修改此处
Private ReadOnly connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb"
Private DS As New DataSet()
Private source1 As New BindingSource()

Private Sub Refreshdata()
    ' 核心修复:清空原有缓存数据,避免Fill追加重复内容
    DS.Clear()
    ' Using块自动释放数据库连接资源,避免连接泄漏
    Using DA As New OleDbDataAdapter("SELECT * FROM SWOT", New OleDbConnection(connString))
        DA.Fill(DS, "SWOT_Report")
        ' 按表名获取对应DataView,避免索引错位
        Dim view1 As New DataView(DS.Tables("SWOT_Report"))
        source1.DataSource = view1
        DataGridView1.DataSource = source1
        DataGridView1.Refresh()
    End Using
End Sub
核心改动说明
  • 每次刷新第一步先调用DS.Clear()清空DataSet内所有缓存,Fill时会重新创建目标表,从逻辑上彻底杜绝重复追加数据的问题。
  • 把数据适配器、数据库连接实例放在Using块内,操作完成后自动释放连接资源,避免长期运行出现数据库连接被占用的异常。
  • 改用表名DS.Tables("SWOT_Report")获取对应数据表生成DataView,替代原有的索引取值写法,不会因为DataSet内表顺序变动导致绑定错误。
  • 直接将BindingSource作为DataGridView的绑定源,后续如果需要做数据过滤、排序操作,可直接操作source1对象,无需重复重置GridView的绑定逻辑。

小提示:如果后续Access数据库文件路径调整,只需要修改connString常量内的路径值即可,无需改动其余业务逻辑代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 16:24:04