1

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

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

班级代码:

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“插入产品(grupo、nombre、medida、cantidad、precio)值(?,?,?,?,?)”。参见 ejecutó el texto de comando "INSERT INTO productos (grupo, nombre, medida, cantidad, precio) VALUES (?, ?, ?, ?, ?)" en la conxión "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =inventariosBD.accdb;" y devolvió el número de filas afectadas。

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

解决了

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

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

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

新问题

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

4

1 回答 1

0

解决了

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

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

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

于 2016-09-02T18:27:06.720 回答