【发布时间】:2021-12-11 00:47:59
【问题描述】:
我有一个 Access 数据库 2007 并尝试使用下面显示的代码编辑内容。 代码运行无异常,但原始数据没有改变。 该数据库有一个主键 (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
【问题讨论】:
-
我从未使用过适配器,但您有一个
BeginEdit()却没有对应的EndEdit()。Adapter.Update(ds)应该返回受影响的行数,所以不要忽略它。 -
如果您要编写
OleDbCommand,只需将查询更改为实际的 UPDATE 查询,然后使用 cmd.ExecuteNonQuery。无需读取数据,在 .NET 代码中更新数据,并让适配器更新数据库。 -
Stop在那里做什么?你永远不会执行任何事情。
标签: vb.net ms-access-2007 oledbdataadapter