Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
C# 通过两种方式将DataTable与MySQL数据库同步_C#_Mysql_Datatable_Dataset_Database Concurrency - Fatal编程技术网

C# 通过两种方式将DataTable与MySQL数据库同步

C# 通过两种方式将DataTable与MySQL数据库同步,c#,mysql,datatable,dataset,database-concurrency,C#,Mysql,Datatable,Dataset,Database Concurrency,我有一个DataSet/DataTable,我希望将更改写入MySQL数据库,如果MySQL数据库中有任何更改,请将这些更改写回我的DataSet/DataTable 简言之: myDataSet->MySQL数据库用户编辑值 myDataSet好的,现在我明白了 第一:当一行的RowState设置为modified时,即设置新值时,我调用mysqlDataAdapter.UpdatedsTable,_tablename;我得到错误是因为设置值与数据库中的值相同 第二:因为我将Eventhand

我有一个DataSet/DataTable,我希望将更改写入MySQL数据库,如果MySQL数据库中有任何更改,请将这些更改写回我的DataSet/DataTable

简言之:

myDataSet->MySQL数据库用户编辑值


myDataSet好的,现在我明白了

第一:当一行的RowState设置为modified时,即设置新值时,我调用mysqlDataAdapter.UpdatedsTable,_tablename;我得到错误是因为设置值与数据库中的值相同

第二:因为我将Eventhandler行_更改为活动状态,所以在将表中的值更改为MySQL数据库mysqlDataAdapter.UpdatedsTable中的值后,在我将行状态设置为Unchanged之前,突然调用了_tablename

解决方案: 我只是在搜索和更改远程MySQL服务器上的差异时设置一个bool值。当此值设置为true时,更改的行不会触发UpdateTable。当更改本地表中的值时,因为该值在远程服务器上已更改,如果该行尚未更改,我将为该行调用AcceptChanges。当用户在这么短的时间内对本地表进行更改时,我更新这些更改不会丢失,它们只是本地的,不会立即在远程MySQL服务器上更新

private MySqlDataAdapter mysqlDataAdapter;
private DataSet dsTable;
private string _tablename;

public void ReadTable(string tablename)
{
    _tablename = tablename;
    String query = "select * from " + tablename;

    if (dsTable == null)
        dsTable = new DataSet();

    mysqlDataAdapter = new MySqlDataAdapter(query, (MySqlConnection)connection);
    MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(mysqlDataAdapter);

    mysqlDataAdapter.Fill(dsTable, tablename);
}
private void Row_Changed(object sender, DataRowChangeEventArgs e)
{... ChangeIntegerValueInReflectedTable(...); }
public void ChangeIntegerValueInReflectedTable(int rowIndex, string columnName, int newValue)
{
    dsBom.Tables[0].Rows[rowIndex][columnName] = newValue;
}
public void UpdateTable()
{
        mysqlDataAdapter.Update(dsTable, _tablename);
}