DataAdapter 更新不适用于 Access DB
DataAdapter update not working against an Access DB
我正在尝试创建一个 class 来存储我的连接字符串和用于插入、更新和删除的一般函数。
测试 INSERT 函数,似乎没有任何错误地完成了该过程,但是物理数据库没有新注册表。
Class代码:
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 comando "INSERT INTO productos (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 调试器显示我的数据集正确地具有新值。哪里错了?
已解决
我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。
我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。
换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。
新一期
所以我的代码插入到数据库中,但它替换了相同的注册表,它就像一个更新而不是插入,即使输出查询说插入如上所示。
已解决
我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。
我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。
换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。
我正在尝试创建一个 class 来存储我的连接字符串和用于插入、更新和删除的一般函数。
测试 INSERT 函数,似乎没有任何错误地完成了该过程,但是物理数据库没有新注册表。
Class代码:
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 comando "INSERT INTO productos (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 调试器显示我的数据集正确地具有新值。哪里错了?
已解决
我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。
我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。
换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。
新一期
所以我的代码插入到数据库中,但它替换了相同的注册表,它就像一个更新而不是插入,即使输出查询说插入如上所示。
已解决
我在 Visual Studio 的解决方案资源管理器中添加了数据库,因此它会自动将数据库添加到 Bin/Debug 文件夹中。
我正在检查 Visual Studio 的数据库,但我意识到它显示的是原始数据库,而不是 Bin/Folder 中的数据库。
换句话说... Visual Studio 向我展示了另一个数据库,而不是受我的代码影响的数据库。