2013-07-21 132 views
1

的情况如下:检测数据库查询更新

  1. 客户A和客户B都登​​录到应用程序。
  2. 客户端A和客户端B已填充其gridview(显示上载的文件)。
  3. 客户端A上传文件到数据库。
  4. 客户端B必须检测到存在添加的数据(客户端A上传的文件)并重新填充gridview。

我需要知道步骤4的工作流程。我读了关于使用SqlDependency并已阅读此文章http://rusanu.com/2007/11/01/remove-pooling-for-data-changes-from-a-wcf-front-end/
但是,如果我没有错,本文使用Notification Services,SQL Server 2008中不推荐使用它。我还想知道如何在客户端注册代码时检测到数据库中的查询结果有变化。由于

编辑
目前该选项的SqlDependency,触发器,WCF,Observer模式。如果有人知道这些解决方案中的任何一个是否可以在我的情况下实施,请随时发表评论并告诉我。

回答

2

您可以在应用程序层执行此操作。 您可以使用集中方法/类来更新数据库中的文件。 然后,您可以注册观察员(观察者模式)以获取任何更新的通知。 通过这种方式,您可以在数据库中的数据更改时刷新多个客户端。

以上建议仅在没有来自其他进程或直接数据库更新的数据更改时才有效。

+0

你有样品可以证明你描述的方式吗?谢谢 – user2541163

+0

其实你可以在互联网上阅读关于Observer模式。但为了保持简单,只需暂时忽略它,并硬编码应该在您的DAO或服务中获得通知的对象,这将更新数据库表 – Mangoose

+0

我仍然有点困惑。假设客户端A更新数据库中的文件并注册观察者,那么客户端B是否知道观察者正在被注册? – user2541163

1

你错了,文章没有使用Notification Services。 继在文章中使用:

  • 在顶部有一个web服务(WCF双工信道),客户端调用; 客户端有一个回调,当数据发生变化时被调用; 这可以与数据库轮询一起使用;另一方面文章 使用更先进的技术来对数据变化做出反应
  • 在底层的数据访问层中,app服务器使用普通的ADO.Net连接到 使用SqlDependency;使用这种技术,用户附加了一个事件,当数据发生变化时,该事件将被触发;服务器将立即发送 更新的数据到客户端
  • 在数据库端,SqlDependency 在内部使用SQL Server Service Broker来避免轮询;如果你知道如何操纵 服务代理对象

所以,没有这个技术的使用已过时通知服务,您可以手动自己做到这一点。在那篇文章中描述了你需要开始的一切(即使你使用SQL Server 2012)。

+0

感谢或澄清 – user2541163