我有一個DataSet/DataTable,我想將更改寫入MySQL數據庫,如果MySQL數據庫中有任何更改,請將這些更改寫回到我的DataSet/DataTable。使用MySQL數據庫兩種方式同步DataTable
簡而言之:
myDataSet - > MySQL數據庫(用戶編輯值)
myDataSet < - MySQL數據庫(另一用戶編輯的MySQL數據庫)
填充數據集從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);
}
更新表中的值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會在無限循環中刷新。
我現在被卡住了。有一個好方法嗎?