2013-03-19 42 views
0

我刚刚发现了关于CommandBuilder的内容,并认为它听起来很直接且易于使用。很明显,我仍然错过了一些东西。我有一个成功更新名为Customers的dbSet表的DataGridView。但它没有更新到实际的数据库文件:使用CommandBuilder验证DataGridView中的OleDb

... 
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 

它不会抛出一个错误,我做了保存在内存中的所有变化(我可以打开和关闭形式和变化将保持),但它们实际上并未写入数据库。我错过了什么?

+0

它是在虚拟的模式吗? – 2013-03-19 06:04:28

+0

@TonyShih我不确定。我没有将虚拟模式设置为真。我是不是该? – 2013-03-19 12:53:27

+0

@TonyShih在我的版本中,这似乎没有效果? – 2013-03-19 18:54:10

回答

0

试试这个

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 
+0

我认为有一个小的错字,或者我不理解的东西。 m_Bs.DataSource应该是m_Bsource吗? – 2013-03-19 13:50:19

+0

您可以删除m_B并直接将m_Dtcustomer设置为datagridview的数据源。 – 2013-03-20 01:45:24

+0

我明白这一点,但我认为它上面的应该阅读mBsource。如果这是正确的,那么我总是得到:错误:对象引用未设置为对象的实例。在UpdateDatabase() – 2013-03-20 01:58:07