2016-12-01 75 views
0

我想用另一个线程更新数据库的更改,因为当我更改超过100个单元格值时,表单冻结几秒钟。C#dataGridView更新到另一个线程的数据库

我尝试了很多的解决方案,但我总是得到这个错误

已经有一个用此Connection 必须先关闭相关联的打开DataReader

我该如何解决这个问题?
不必穿线使用此代码更新数据库:

private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
     DataTable changes = ((DataTable)dataGridView1.DataSource).GetChanges(); 

     if (changes != null) 
     { 
      MySqlCommandBuilder mcb = new MySqlCommandBuilder(mySqlDataAdapter); 
      ((DataTable)dataGridView1.DataSource).AcceptChanges(); 
      mySqlDataAdapter.UpdateCommand = mcb.GetUpdateCommand(); 
      mySqlDataAdapter.Update(changes); 
     } 
    } 
    catch (Exception _ex) 
    { 
     MessageBox.Show(_ex.ToString()); 
    } 
} 

回答

-1

尝试是这样的:)

Thread thread = new Thread(updateChanges); 
thread.Start(); 

private void updateChanges() 
{ 
    //here your code to update changes.   
} 

不过,如果你正在更新的updateChanges内(任何UI组件的功能,你将不得不使用一个InvokeRequired。

0

你的错误信息是完全简单:

已经有一个用此Connection相关联的打开DataReader必须先

你必须关闭数据库现有的连接关闭,你不应该把它放在开放状态。这可以通过关闭(或配置)连接或适配器来完成,而这显然不适用。

此外,你应该从你的用户界面中删除数据库逻辑 - 这是可怕的设计。如果您想在后台处理某些事件,则可以使用async/awaitasynchronous event handler,并在后台触发某些Task

相关问题