У меня есть DataSet/DataTable, который я бы хотел записать в базу данных MySQL, и если какие-либо изменения в базе данных MySQL будут записывать эти изменения обратно в мой DataSet/DataTable.Синхронизировать DataTable с базой данных MySQL двумя способами
Короче:
myDataSet -> База данных MySQL (пользователь редактирует значения)
myDataSet < - MySQL базы данных (другой пользователь редактирует базу данных MySQL)
Заполнение DataSet из базы данных 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 затронул 0 ожидаемых 1 записи. System.Exception {System.Data.DBConcurrencyException}
Я не знаю почему. Я также меняю ячейки в dsTable, когда я обновляю отдельные значения из пользовательского интерфейса.
Когда я вызываю mysqlDataAdapter.Fill (dsTable, tablename), мой datagridview обновляется в бесконечном цикле.
Я застрял прямо сейчас. Есть ли хороший подход?