C# 从数据库更新本地数据表

C# 从数据库更新本地数据表,c#,database,merge,datatable,C#,Database,Merge,Datatable,我已经研究这个问题好几天了,希望有人能给出答案。我想对这个问题更一般的描述是,多个用户将从一个应用程序的多个实例访问一个数据库,我希望尽可能保持数据的本地副本最新。这是我目前的尝试,但我愿意以任何方式保持本地副本与数据库同步 我有两个数据表: dtOriginal在应用程序开始时加载,允许用户对其进行编辑 dtFromDb在用户更改表单上显示的记录时加载,它仅包含更改后当前显示的记录的当前值 仅当dtOriginal中的行未标记为“修改”时,我才尝试使用dtFromDb中的那些值更新dtOrig

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

我有两个数据表:
dtOriginal在应用程序开始时加载,允许用户对其进行编辑

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

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

我一直在尝试使用System.Data.DataTable类的merge方法实现这一点

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确实从数据库中获取了更新的值,但我一定没有正确使用merge方法,因为更新的值没有传播到本地副本

任何想法都将不胜感激

谢谢


Tyler

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

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


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

是否要将dtFromDb的值更新为dtOriginal或database??还要告诉我们,为了更新数据库中的记录,您是否使用了任何循环?这实际上是一个非常好的主意。我不知道为什么我以前没有想过要打开刷新按钮。保存现在可以工作了,但只是用用户在表单中拥有的内容覆盖数据库中的内容,因此没有乐观的并发检查。我想如果我把一个乐观的货币签入,刷新按钮会更有意义。谢谢你的帮助!问题是,不管怎样,如果您在本地手动合并更改,除非您在正确实现所有细节方面做出了很大的努力,否则您将如何决定哪些更改必须覆盖哪些其他更改?让db处理并发性,谁先单击save(保存)就赢了,其他数据库将根据当时的旧记录进行过时的更改,并且在保存失败的情况下刷新数据是有意义的。。。