首页 > 解决方案 > 为什么我的 vb.net 代码不会改变我的 Access2007 数据库

问题描述

我有一个 Access database2007 并尝试使用下面显示的代码编辑内容。代码运行无异常,但原始数据没有改变。该数据库有一个主键 (ID) 和大约 20 列。使用相同的数据库并使用 Adapter.Update(ds) 添加新行可以正常工作 - (此处未显示)。现在我编写了一个最小的代码来更改特定列 (=4) 中的内容以查看发生了什么问题,但没有显示错误并且数据库没有更改。我将 VS 2019 用于 .exe 应用程序。

有什么建议和/或如何解决它?/库尔特 J

 Private Sub Button2_Click_(sender As Object, e As EventArgs) Handles Button2.Click
        'testa att uppdatera databas
        cnnTävl = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + TPath + AktTävlNamn + "_" + AktTävlDat + ".mdb")
        Dim strSQL = "Select * FROM Deltagare WHERE Patrull='12' AND Figur='01'"
        Dim cmd As New OleDb.OleDbCommand(strSQL, cnnTävl)
        Dim Adapter As New OleDb.OleDbDataAdapter(cmd)
        Dim ds As New DataSet
        Dim cb As New OleDb.OleDbCommandBuilder(Adapter)
        Stop
        Try
            cnnTävl.Open()
            Adapter.Fill(ds)
            If ds.Tables(0).Rows.Count = 1 Then
                ds.Tables(0).Rows(0).BeginEdit()
                ds.Tables(0).Rows(0).Item(4) = "Bo Ek"
            Else
                MsgBox("No rows to edit")
                cnnTävl.Close()
                Exit Sub
            End If
            cb.GetUpdateCommand()
            Adapter.Update(ds)
        Catch Er As Exception
            MsgBox("Er= " + Er.Message)
        End Try
        cnnTävl.Close()
    End Sub

标签: vb.netms-access-2007oledbdataadapter

解决方案


根据@LarsTech 的评论

我从来没有使用过适配器,但是你有一个BeginEdit()没有对应的EndEdit(). Adapter.Update(ds)应该返回受影响的行数,所以不要忽略它。

EndEdit()解决了这个问题。我在网上看到的所有示例都没有使用EndEdit(),但可能示例太旧了。

谢谢拉斯的帮助。


推荐阅读