将数据集与数据库中的数据同步的最佳方法是什么?以下是参数:

  • 我们不能简单地重新加载数据,因为它绑定到用户可能已配置的 UI 控件(它是一个可以展开/折叠的树形网格)
  • 我们不能在数据库中使用更改标志(如 UpdatedTimeStamp),因为更改并不总是流经应用程序(例如DBA 可以使用 SQL 语句更新字段)
  • 我们不能在数据库中使用更新触发器,因为它是一个多用户系统
  • 我们正在使用 ADO.NET 数据集
  • 给定行的多个字段可以更改

我已经研究了数据集的合并功能,但这似乎没有保留“ID”列的概念。我研究过 DiffGram 功能,但这里的问题是这些似乎是由同一数据集中的更改生成的,而不是某些外部数据源上发生的更改。

我已经使用这个解决方案有一段时间了,但我知道可行的方法(效率很低)是构建一个单独的数据集,然后迭代所有行,逐个字段地将更改应用到它所在的数据集边界。

有人遇到过类似的情况吗?你做了什么来解决这个问题?即使您没有遇到类似的问题,我们也欢迎任何解决方案的建议。

谢谢

有帮助吗?

解决方案

DataSet.Merge 对此效果很好 如果 您为每个数据表定义了一个主键;DataSet 将向任何数据绑定 GUI 控件引发更改事件

如果您的表很小,您可以重新读取所有行并定期合并,否则用时间戳限制要读取的集合是一个好主意 - 只需告诉 DBA 遵循规则并更新时间戳即可;-)

另一种选择(需要一些工作)是使用触发器或存储过程保留更改行队列(时间戳、行 ID),并根据队列中的时间戳进行刷新查询;如果基表中有很多行,这将更有效,允许您(通过队列记录上的内部联接)仅提取自上次轮询时间以来更改的行。

其他提示

我认为存储用户已展开的节点列表(假设您可以唯一标识每个节点),然后重新加载数据并将其重新绑定到树视图,然后展开所有节点会更容易之前扩展过的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top