gpt4 book ai didi

c# - DataTable与MySQL数据库同步的两种方式

转载 作者:行者123 更新时间:2023-11-29 23:40:27 30 4
gpt4 key购买 nike

我有一个 DataSet/DataTable,我想将更改写入 MySQL 数据库,如果 MySQL 数据库中有任何更改,则将这些更改写回我的 DataSet/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 会无限循环刷新。

我现在被困住了。有什么好的办法吗?

最佳答案

好的,现在我明白了。

第一:当一行的 RowState 设置为已修改(设置新值时就是这种情况)并且我调用 mysqlDataAdapter.Update(dsTable, _tablename);我收到错误是因为设置的值与数据库中的值相同。

第二:因为我的 Eventhandler Row_Changed 处于事件状态,所以在将表中的值更改为 MySQL 数据库中的值后,突然调用了 mysqlDataAdapter.Update(dsTable, _tablename),然后才能将 RowState 设置为 Unchanged。

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

关于c# - DataTable与MySQL数据库同步的两种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26180915/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com