我有一个 DataSet/DataTable,我想将更改写入 MySQL 数据库,如果 MySQL 数据库中有任何更改,请将这些更改写回我的 DataSet/DataTable。
简而言之:
myDataSet -> MySQL 数据库(用户编辑值)
myDataSet <- MySQL 数据库(另一个用户编辑了 MySQL 数据库)
从 MySQL 数据库中填充 DataSet 是这样完成的:
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);
}
更新表中的值,为表设置了 Row_Changed EventHandler:
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;
}
要更新我使用的 MySQL 数据库:
public void UpdateTable()
{
mysqlDataAdapter.Update(dsTable, _tablename);
}
这行得通。现在我想更新本地表中远程 MySQL 数据库的更改。据我所知,没有此命令,并且 mysqlDataAdapter.Update 不会将更新返回到我的表,只有本地表-> MySQL 数据库。
所以我编写了一个函数,它每 30 秒获取一次表格并进行比较。然后我将更改写入我的 dsTable。那行得通,但是下次我调用 UpdateTable() 时,我得到了错误:
并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条。System.Exception {System.Data.DBConcurrencyException}
我不知道为什么。当我从用户界面更新单个值时,我也会更改 dsTable 中的单元格。
当我调用 mysqlDataAdapter.Fill(dsTable, tablename) 我的 datagridview 在无限循环中刷新。
我现在被困住了。有什么好的方法吗?