Обновление DataAdapter не работает с БД Access

Я пытаюсь создать класс для хранения строки подключения и общих функций для вставки, обновления и удаления.

Тестируя функцию 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) ЗНАЧЕНИЯ (?,?,?,?,?)". Se ejecutó el texto de comando "INSERT INTO productos (grupo, nombre, medida, cantidad, precio) ЗНАЧЕНИЯ (?,?,?,?,?)" En la conexión "Provider=Microsoft.ACE.OLEDB.12.0; Источник данных =inventariosBD.accdb;" y devolvió el número de filas afectadas.

Таким образом, запрос содержит вопросительные знаки вместо значений, которые я хочу вставить, но отладчик VS показывает, что мой DataSet имеет новые значения правильно. Где ошибка?

решаемая

Я добавил базу данных в обозревателе решений Visual Studio, чтобы она автоматически добавляла базу данных в папку Bin/Debug.

Я проверял базу данных из Visual Studio, но понял, что она показывает мне исходную базу данных, а не ту, которая находится в Bin/Folder.

Другими словами... Visual Studio показала мне другую базу данных, отличную от той, на которую воздействовал мой код.

Новый выпуск

Так что мой код вставляет в базу данных, но он заменяет тот же реестр, он похож на UPDATE, а не INSERT, даже если в выходном запросе указано INSERT INTO, как показано выше.

1 ответ

Решение

решаемая

Я добавил базу данных в обозревателе решений Visual Studio, чтобы она автоматически добавляла базу данных в папку Bin/Debug.

Я проверял базу данных из Visual Studio, но понял, что она показывает мне исходную базу данных, а не ту, которая находится в Bin/Folder.

Другими словами... Visual Studio показала мне другую базу данных, отличную от той, на которую воздействовал мой код.

Другие вопросы по тегам