1

接続文字列と挿入、更新、削除の一般的な関数を格納するクラスを作成しようとしています。

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.Update(ds, tabla)にブレークポイントを配置すると、 VisualStudio に次のように表示されます。

ADO.NET: Ejecutar NonQuery "INSERT INTO productos (grupo, nombre, medida, cantidad, precio) VALUES (?, ?, ?, ?, ?)". Se ejecutó el texto de commando "INSERT INTO product (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 デバッガーは DataSet に新しい値が正しく含まれていることを示しています。間違いはどこですか?

解決済み

Visual Studio のソリューション エクスプローラーでデータベースを追加したので、自動的にデータベースが Bin/Debug フォルダーに追加されました。

Visual Studio からデータベースをチェックしていましたが、Bin/Folder のデータベースではなく、元の DB が表示されていることに気付きました。

言い換えれば... Visual Studio は、コードの影響を受けるデータベースとは別のデータベースを表示していました。

新しい問題

したがって、私のコードはデータベースにINSERT INTOしますが、同じレジストリを置き換えます。出力クエリが上記のようにINSERT INTOと表示されていても、INSERTではなくUPDATEのようです。

4

1 に答える 1

0

解決済み

Visual Studio のソリューション エクスプローラーでデータベースを追加したので、自動的にデータベースが Bin/Debug フォルダーに追加されました。

Visual Studio からデータベースをチェックしていましたが、Bin/Folder のデータベースではなく、元の DB が表示されていることに気付きました。

言い換えれば... Visual Studio は、コードの影響を受けるデータベースとは別のデータベースを表示していました。

于 2016-09-02T18:27:06.720 に答える