【问题标题】:Update local datatable from database从数据库更新本地数据表
【发布时间】:2011-11-13 23:11:33
【问题描述】:

我已经研究这个问题几天了,希望有人能给出答案。我想这个问题的更一般的描述是多个用户将从应用程序的多个实例访问数据库,我希望尽可能保持数据的本地副本为最新。这是我目前的尝试,但我愿意以任何方式保持本地副本与数据库同步。

我有两个数据表:
dtOriginal 在应用程序启动时加载,并且允许用户对其进行编辑。

dtFromDb 在用户更改表单上显示的记录时加载,它仅包含更改后正在显示的记录的当前值。

仅当 dtOriginal 中的行未标记为“已修改”时,我才尝试使用 dtFromDb 中的值更新 dtOriginal 表。

我一直在尝试使用 System.Data.DataTable 类的合并方法。

StronglyTypedDataTable dtOriginal = StronglyTypedDataTableAdapter.GetData();
// User modifies one record through collectionview...
// displayed record is then changed and the following occurs
StronglyTypedDataTable dtFromDb = StronglyTypedDataTableAdapter.GetDataByID(currentID);
dtOriginal.Merge(dtFromDb, true);

如果标记为“未修改”的任何行在程序的另一个实例中发生更改并传播回数据库,那么它们将使用数据库中的任何新本地值进行更新,但这是不是这样。看起来 dtFromDb 确实从数据库中获取了更新的值,但我不能正确使用合并方法,因为更新的值不会传播到本地副本。

任何想法将不胜感激。

谢谢,

泰勒

【问题讨论】:

  • 您想将 dtFromDb 的值更新为 dtOriginal 或数据库?并告诉您更新数据库中的记录是否使用任何循环?

标签: c# database merge datatable


【解决方案1】:

我看到您尝试手动解决不属于您的应用程序的问题:数据并发!

当您想保存更改时,只需发送到数据库,如果您的设计和数据层正常,则如果有人更改某些内容,保存将失败,或者一切正常。

或者您可以想象在您的页面或网格中添加一个刷新按钮,如果用户正常单击刷新,则本地更改会丢失。分布式应用程序让它被分发,谁先保存将获胜。我不认为 gou 应该加载两次并在客户端同步这两个表。

【讨论】:

  • 这实际上是一个非常好的主意。我不知道为什么我之前没有想到要打开刷新按钮。保存现在有效,但只是用用户在表单中的任何内容覆盖数据库中的任何内容,因此没有乐观并发检查。我想如果我输入一个乐观的货币检查,刷新按钮会更有意义。感谢您的帮助!
  • 问题是,无论如何,如果您在本地手动合并更改,除非您付出很大的努力将所有内容正确实施到最后一个细节,否则您将如何决定哪些更改必须覆盖哪些其他更改?让数据库处理并发,谁先点击保存获胜,其他人将根据旧记录进行过时的更改,并且在保存失败的情况下刷新数据是有意义的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2011-10-17
  • 2012-11-23
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多