从对多个数据网格的更改更新本地存储的数据库(Visual Studio C#,使用 OLEDB 的 Access 数据库)

Posted

技术标签:

【中文标题】从对多个数据网格的更改更新本地存储的数据库(Visual Studio C#,使用 OLEDB 的 Access 数据库)【英文标题】:Updating locally stored database from changes to multiple data grids ( Visual studio C#, Access database using OLEDB) 【发布时间】:2018-03-22 20:58:22 【问题描述】:

我正在尝试根据包含数据库副本的数据网格发生的更改来更新本地存储的数据库,但失败了。我认为我遇到问题的原因是由于数据库有两个表,我已将它们放入两个数据网格中,但只有一个数据集。我对 OLEDB 的了解有限,但我创建了多个程序,其中包含如下所示的更新例程,因此我不确定如何适应这个新程序。

Screenshot of tables in working program

变量

    OleDbConnection Connection;
    OleDbDataAdapter oledbAdapter;
    OleDbCommandBuilder oledbCmdBuilder;
    //DataSet ds = new DataSet();
    string ConnectionString = null;
    int CurrentRow = 0;
    DataSet ds = new DataSet();

数据库连接 - 加载时执行

private void database_datagrid_load()
    
        string SQL1 = "SELECT * FROM tbl_Customers";       
        string SQL2 = "SELECT * FROM tbl_Jobs";                     
        Connection = new OleDbConnection(ConnectionString);         
        try                                                         
        
            ds.Clear();
            Connection.Open();
            oledbAdapter = new OleDbDataAdapter(SQL1, Connection);
            oledbAdapter.Fill(ds, "tbl_Customers");
            oledbAdapter.SelectCommand.CommandText = SQL2;
            oledbAdapter.Fill(ds, "tbl_Jobs");
            oledbAdapter.Dispose();
            Connection.Close();

            database_datagrid_customer.DataSource = ds.Tables[0];
            database_datagrid_jobs.DataSource = ds.Tables[1];



        
        catch(Exception ex)
        
            MessageBox.Show(Convert.ToString(ex));
        

    

只有没有崩溃的更新代码 - 完成但不更改数据库

  Connection.Open();
            string SQL = "SELECT * FROM tbl_Jobs"; 
            OleDbDataAdapter oledbAdapterNEW = new OleDbDataAdapter(SQL, Connection); //new adapter with just jobs table ignoring customers for now


            OleDbCommandBuilder oledbCmdBuilderNEW = new OleDbCommandBuilder(oledbAdapterNEW); //cmdbuilder is set but never used not sure why  
            DataSet changes = ds.GetChanges();





            if (changes != null)
            
                oledbAdapterNEW.Update(ds.Tables[0]);
            
            ds.AcceptChanges();
            MessageBox.Show("Jobs Save Changes");

【问题讨论】:

【参考方案1】:

不积极,但我认为应该是

if (changes != null)

    ds.Tables[0].AcceptChanges();
    //oledbAdapterNEW.Update(ds.Tables[0]);

【讨论】:

尝试更改但没有成功,程序没有崩溃但也没有保存数据库。感谢您的回复。【参考方案2】:

想通了,这是为需要它的人提供的解决方案。更新两个表。

private void database_btn_updatedb_Click(object sender, EventArgs e)
    

        Connection = new OleDbConnection(ConnectionString);
        DataSet changes = ds.GetChanges();
        try
        
            Connection.Open();
            string SQL = "SELECT * FROM tbl_Jobs"; 
            OleDbDataAdapter oledbAdapterNEW = new OleDbDataAdapter(SQL, Connection); //new adapter with just jobs table ignoring customers for now
            OleDbCommandBuilder oledbCmdBuilderNEW = new OleDbCommandBuilder(oledbAdapterNEW); 


            if (changes != null)
            
                oledbAdapterNEW.Update(ds,"tbl_Jobs");
                MessageBox.Show("Jobs Save Changes");
            

            SQL = "SELECT * FROM tbl_Customers";
            oledbAdapterNEW = new OleDbDataAdapter(SQL, Connection);
            oledbCmdBuilderNEW = new OleDbCommandBuilder(oledbAdapterNEW);

            if (changes != null)
            
                oledbAdapterNEW.Update(ds, "tbl_Customers");
                MessageBox.Show("Customer Save Changes");
            
            ds.AcceptChanges();

            Connection.Close();

        

【讨论】:

以上是关于从对多个数据网格的更改更新本地存储的数据库(Visual Studio C#,使用 OLEDB 的 Access 数据库)的主要内容,如果未能解决你的问题,请参考以下文章

dojo datagrid 1.7 在存储更改时自动更新

数据网格 Xamarin UWP 问题 - HRESULT E_FAIL 已从对 COM 组件的调用中返回

ExtJS4 网格不会更新远程数据库

Kendo网格在网格中触发多个控件的数据源事件。(MVVM绑定)

由于本地存储代理,Extjs 网格面板最多显示 25 行。如何更改此限制值?

使用 WPF 数据网格更新 SQL 数据库表