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