DataAdapter 更新不适用于 Access DB

DataAdapter update not working against an Access DB

我正在尝试创建一个 class 来存储我的连接字符串和用于插入、更新和删除的一般函数。

测试 INSERT 函数,似乎没有任何错误地完成了该过程,但是物理数据库没有新注册表。

Class代码:

Imports System.Data.OleDb

Public Class ControlBD
    ' Connection string
    Private ConBD As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" &
                                         "Data Source=inventariosBD.accdb;")
    ' Data Set
    Private ds As New DataSet

    ' Data Adapter
    Private da As New OleDb.OleDbDataAdapter

    ' SQL queries
    Public Sql As String

    Public Sub cargarDS(tabla)
            sql = "Select * from " & tabla
    da = New OleDb.OleDbDataAdapter(sql, ConBD)
    da.Fill(ds, tabla)
End Sub

Public Sub insertar(tabla As String, valores As Array)
    ' Command Builder 
    Dim cb As New OleDb.OleDbCommandBuilder()

    Dim dsRegistro As DataRow = ds.Tables(tabla).NewRow()

    For i = 0 To UBound(valores)
        dsRegistro.Item(valores(i)(0)) = valores(i)(1)
    Next

    cb.DataAdapter = da
    ds.Tables(tabla).Rows.Add(dsRegistro)
    da.Update(ds, tabla)
End Sub
End Class

表单加载代码:

Public Class formPrincipal
Public ControlBD As New ControlBD

Private Sub formPrincipal_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim tabla As String = "productos"
    Dim vals(4) As Array

    ControlBD.cargarDS(tabla)

    vals(0) = {"grupo", "mi_grupo'"}
    vals(1) = {"nombre", "mi_nombre"}
    vals(2) = {"medida", "mi_medida"}
    vals(3) = {"cantidad", "50"}
    vals(4) = {"precio", "80"}

    ControlBD.insertar(tabla, vals)
End Sub

最后,当我在更新行放置断点时 da.Update(ds, tabla) VisualStudio 显示如下:

ADO.NET: Ejecutar NonQuery "INSERT INTO productos (grupo, nombre, medida, cantidad, precio) VALUES (?, ?, ?, ?, ?)". Se ejecutó el texto de comando "INSERT INTO productos (grupo, nombre, medida, cantidad, precio) VALUES (?, ?, ?, ?, ?)" en la conexión "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=inventariosBD.accdb;" y devolvió el número de filas afectadas.

所以查询有问号而不是我要插入的值,但 VS 调试器显示我的数据集正确地具有新值。哪里错了?

已解决

我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。

我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。

换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。

新一期

所以我的代码插入到数据库中,但它替换了相同的注册表,它就像一个更新而不是插入,即使输出查询说插入如上所示。

已解决

我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。

我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。

换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。