有没有使用 vb.net 更新访问表的快速方法?

Posted

技术标签:

【中文标题】有没有使用 vb.net 更新访问表的快速方法?【英文标题】:Is there a quick way to update an access table using vb.net? 【发布时间】:2015-03-13 14:19:45 【问题描述】:

我正在尝试将我设置的 vb.net 表单中的数据表复制到 access 数据库中。我正在使用另一个用户(Casbar27,Records added to ms access database with vb 2010 not saving)发布的一段代码(有一些改动)。

    Back_EndDataSet.tblTest.Clear()
    Dim adapter As New Back_EndDataSetTableAdapters.tblTestTableAdapter
    Dim rowCode As DataRow = Back_EndDataSet.tblTest.NewtblTestRefreshxinRow

    For Each row As DataRow In source.Rows
        adapter.Fill(Back_EndDataSet.tblTest)

        rowCode.Item(0) = row.Item(0)
        rowCode.Item(1) = row.Item(1)
        rowCode.Item(2) = row.Item(2)
        rowCode.Item(3) = row.Item(3)
        rowCode.Item(4) = row.Item(4)
        rowCode.Item(5) = row.Item(5)
        rowCode.Item(6) = row.Item(6)
        rowCode.Item(7) = row.Item(7)
        rowCode.Item(8) = row.Item(8)
        rowCode.Item(9) = row.Item(9)
        Back_EndDataSet.tblTest.AddtblTestRow(rowCode)


        adapter.Update(Back_EndDataSet.tblTest)
    Next

虽然这有效,但速度很慢,如果运行多次,则会产生多个相同记录。我希望它在启动时擦除访问表并重写它,最好在一分钟内完成。有什么建议吗?

【问题讨论】:

尝试在进入循环之前执行.Fill,在退出循环之后尝试执行.Update。至于清空表格,在开始使用 TableAdapter 之前,您始终可以使用 OleDbCommand 对象运行 DELETE FROM TableName 语句。 【参考方案1】:

按照@Gord Thompson 的建议,我写了一个OleDbCommand 来删除表格,并决定继续使用OleDbCommand 重写我的填充方法。效果很好,完成速度提高了,我不再有重复记录。感谢上帝!

Private Sub UpdateDataBase(ByVal source As DataTable)
    Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= H:\AppDev\Visual Studio 2010\Projects\RawFixerTest1\Raw Fixer Back End.accdb")
    Dim cmdClr As New OleDbCommand
    Dim cmdFill As New OleDbCommand
    Dim i = 0

    con.Open()
    cmdClr.CommandText = "DELETE * FROM tblTestRefreshxin"
    cmdClr.Connection = con
    cmdClr.ExecuteNonQuery()

    cmdFill.Connection = con
    For Each row As DataRow In source.Rows
        cmdFill.CommandText = "INSERT INTO tblTestRefreshxin (numCode, featDesc, alphaCode, clientCode, DTMexclude, attrCode1, attrCode2, attrCode3, attrCode4, lineToPrev) VALUES(" & "'" & row.Item(0) & "','" & row.Item(1) & "','" & row.Item(2) & "','" & row.Item(3) & "','" & row.Item(4) & "','" & row.Item(5) & "','" & row.Item(6) & "','" & row.Item(7) & "','" & row.Item(8) & "','" & row.Item(9) & "')"
        cmdFill.ExecuteNonQuery()
    Next
    con.Close()
End Sub

【讨论】:

以上是关于有没有使用 vb.net 更新访问表的快速方法?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 和 VB.net winform 的批量更新概念

Access 数据库未通过 Vb.net 中的文本框更新

在 vb.net 中更新后刷新数据网格视图

我想在我的 vb.net 中更新我的访问数据库,但总是出错

从 Visual Studio 2010 (VB.NET) 读取访问查询

隐藏 VB.NET 扩展方法/模块