Sql 使用CommandBuilder从DataGridView更新已验证的OleDb
我刚刚了解到CommandBuilder,觉得它听起来直截了当,易于使用。很明显,我还是错过了一些东西。我有一个DataGridView,它成功地更新了名为Customers的dbSet表。但它不会更新到实际的数据库文件:Sql 使用CommandBuilder从DataGridView更新已验证的OleDb,sql,vb.net,ms-access,oledb,oledbcommand,Sql,Vb.net,Ms Access,Oledb,Oledbcommand,我刚刚了解到CommandBuilder,觉得它听起来直截了当,易于使用。很明显,我还是错过了一些东西。我有一个DataGridView,它成功地更新了名为Customers的dbSet表。但它不会更新到实际的数据库文件: ... Dim ConMain As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\dummy_data.accdb") ... Private Sub CustomerDataGr
...
Dim ConMain As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\dummy_data.accdb")
...
Private Sub CustomerDataGridView_RowValidated(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles CustomerDataGridView.RowValidated
Me.CustomersTableAdapter.Update(Me.Dummy_dataDataSet.Customers)
Dim CustomerAdapter As New OleDbDataAdapter("Select * From Customers", ConMain)
Dim ObjComander As New OleDbCommandBuilder(CustomerAdapter)
CustomerAdapter.Update(Dummy_dataDataSet, "Customers")
End Sub
它不会抛出错误,我所做的任何更改都保存在内存中(我可以打开和关闭表单,更改将保留),但它们实际上不会写入数据库。我错过了什么?试试这个
Dim ConMain As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\dummy_data.accdb")
Dim m_DtCustomer As New DataTable
Dim CustomerAdapter As OleDbDataAdapter
Dim m_Bsource As New BindingSource
'Populate the datagridview
Sub FillDataGrid()
CustomerAdapter = New OleDbDataAdapter("Select * From Customers", ConMain)
m_DtCustomer.Clear()
CustomerAdapter.Fill(m_DtCustomer)
m_Bs.DataSource = m_DtCustomer
CustomerDataGridView.Datasource = m_Bs
End Sub
'Update changes to the database
Sub UpdateDatabase()
Dim ObjComander As New OleDbCommandBuilder(CustomerAdapter)
CustomerAdapter.Update(m_DtCustomer)
End Sub
Private Sub CustomerDataGridView_RowValidated(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles CustomerDataGridView.RowValidated
Call Me.UpdateDatabase()
End Sub
它处于虚拟模式,对吗?@TonyShih,我不确定。我没有将虚拟模式设置为True。我应该吗?@TonyShih在我的版本中,这似乎没有效果?我想有一个小的拼写错误,或者我不明白什么。m_Bs.DataSource应该是m_Bsource吗?您可以删除m_Bs并直接将m_Dtcustomer设置为datagridview的数据源。这一行我得到了,但我认为上面的那一行应该是mBsource。如果这是正确的,那么我将继续得到:Error:Object引用未设置为对象的实例。在UpdateDatabase()上,即使我在更新子文件中移动'CustomerAdapter=New OleDbDataAdapter(“Select*From Customers”,ConMain)”,我实际上也无法让它写入(事实上,在我保留的解决方案中,当表单关闭时,它现在会丢失)。尝试在加载表单时调用FillDatagrid子文件。