Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用CommandBuilder从DataGridView更新已验证的OleDb_Sql_Vb.net_Ms Access_Oledb_Oledbcommand - Fatal编程技术网

Sql 使用CommandBuilder从DataGridView更新已验证的OleDb

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

我刚刚了解到CommandBuilder,觉得它听起来直截了当,易于使用。很明显,我还是错过了一些东西。我有一个DataGridView,它成功地更新了名为Customers的dbSet表。但它不会更新到实际的数据库文件:

...
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子文件。