从数据库更新本地数据表

时间:2011-09-09 16:58:20

标签: c# database merge datatable

我已经在这个问题上工作了几天,希望有人可能有答案。我想这个问题的更一般描述是多个用户将从应用程序的多个实例访问数据库,我希望尽可能保持数据的本地副本。这是我目前的尝试,但我愿意保持本地副本与数据库保持同步。

我有两个数据表:
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确实从DB获取更新的值,但我不能正确使用合并方法,因为更新的值不会传播到本地副本。

非常感谢任何想法。

谢谢,

泰勒

1 个答案:

答案 0 :(得分:0)

我看到你尝试手动解决不属于你的应用程序的东西:数据并发!

如果你想保存更改只是发送到数据库,如果你的设计和数据层没问题,如果有人改变某些东西或者它会很好的话,保存将会失败。

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