数据适配器更新对Access DB不起作用



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

测试INSERT函数,似乎没有任何错误,但物理DB没有新的注册表。

类代码:

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处设置断点时。更新(ds, tabla) VisualStudio显示以下内容:

ADO。NET: Ejecutar NonQuery "INSERT INTO productos (group, nombre, medida, cantidad, preco) VALUES (?), ?, ?, ?)"。输入ejecutó el textto de commando "INSERT INTO productos (group, nombre, medida, cantidad, preco) VALUES (?), ?, ?, ?)"en la conexión "提供程序=Microsoft.ACE.OLEDB.12.0;数据源=inventariosBD.accdb;" y devolvió el número de filas afectadas.

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

解决

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

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

也就是说……Visual Studio向我展示了另一个数据库,而不是受我代码影响的数据库。

新问题

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

已解决

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

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

也就是说……Visual Studio向我展示了另一个数据库,而不是受我代码影响的数据库。

最新更新