【问题标题】:Best way to keep GUI updated when the underlying SQL view data changes?当底层 SQL 视图数据发生变化时,保持 GUI 更新的最佳方法是什么?
【发布时间】:2010-09-29 08:13:53
【问题描述】:

假设您有一个带有组件的表单,该组件显示来自 SQL 服务器视图的数据。该组件类似于 ListView 或 DataGrid - 基本上可以以 2D 网格格式显示数据。另一个应用程序更改 SQL 视图描述的数据,并定期执行此操作,但间隔未定义。

问题在于:表单需要使用最新数据保持自身更新,并在其更改和显示之间的延迟最短。

平台限制是您必须使用 .NET 2.0 和 Microsoft 的 SQL Server。 假设您可以完全控制该系统的所有其他部分,并且可以按照您想要的方式进行设计 - 最好的方法是什么?

到目前为止我想到的那些:

  • 定期轮询数据并进行比较以查看发生了什么变化。通过:

    • 从 SQL Server 读取整个视图并将其与当前显示的数据逐行进行比较,在显示的数据进行时更新显示的数据,或者
    • 以某种方式记录视图更改表(使用触发器或应用程序逻辑),每次读取其中的新项目,并将其应用于显示的数据。
  • 在 SQL Server 与表单和更新应用程序之间添加一个层,因此来自主应用程序的任何更新都会转到此处,并且可以实时通知表单应用程序的更改。但不确定如何在实践中做到这一点。

  • 在表上放置触发器以某种方式导致表单被通知 - 可能调用一些自定义扩展存储过程?

任何曾经做过这件事的人,请提供您的见解!

如果您知道任何现有的库已经完成了这一切,请发表评论。

【问题讨论】:

  • 对不起,这是一个带有 HTTP 的 webapp 还是客户端和服务器之间的任何东西?架构很重要...
  • 不,它不是网络应用程序。进行更新的应用程序和进行显示的应用程序都是窗体应用程序。

标签: .net sql-server winforms


【解决方案1】:

阅读查询通知。如果没有太多查询或需要监控的客户端,这可能是一个很好的解决方案。

【讨论】:

    【解决方案2】:

    在我们的小型内部应用程序中,每当用户对数据库中的数据进行更改时,都会通过网络发送一个 UDP 广播,告诉每个人哪些类型的数据已被修改。如果用户打开了与广播内容匹配的部分 gui,则重新加载他们打开的表单。

    由于我们系统的用户打开相同位的数据并不太常见,因此这种情况并不太常见。但是,当有人查看他们打开的相同数据时,我们会发出警报 - 让他们知道可能导致他们正在查看的数据发生变化的原因。

    【讨论】:

    • 我也设计过这种架构。
    • 我也使用了缓存失效...也只显示您的用户需要查看的内容...我通常会汇总正在更新的数据并让他们进行一些钻探。跨度>
    【解决方案3】:

    一般来说,如果您希望您的应用能够扩展,那么 #2 是您想要的方式。查询通知通常不起作用,因为您必须保持与数据库的连接。

    触发器是个坏主意,因为数据库并不总是准确地表示您拥有的模型。 可能,但这不是必需的。

    这就是为什么通过另一个层汇集更新是一个好主意,然后可以在模型更改时发送回通知(并且以不需要持久连接和扩展的方式)。

    您还可以通过让客户端订阅他们想要的通知来减少流量,因此服务器最终不会向不关心的客户端发送太多通知。

    【讨论】:

      【解决方案4】:

      SQL Server 确实提供了通知客户端特定表的更新。根据发生的更新量,这可能是采取的方法。我认为它需要 SQL 2005 或更高版本,但我无法确定。

      如果您对源表有大量更新,您的第二个建议可能会奏效。一种方法是利用 WCF,并利用回调机制。该服务必须是单例或会话的,但它会通过让每个客户端在打开代理时向其注册回调来跟踪连接到它的客户端。然后,您将让客户端通过服务提交更新,并且作为更新事务中的最后一个操作到数据库,您将让服务循环通过所有客户端并通知他们更新(我假设更新数据,这样您就不会重新查询数据库)。这当然意味着中间层的额外负载,但它绝对可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多