当某些用户编辑数据时,如何刷新其他用户界面上的数据

时间:2012-11-27 12:26:12

标签: sql wpf vb.net winforms sql-server-2008-r2

在一个VB.net应用程序中,我有一个SQL界面,我在SQL数据库中为这个应用程序的用户提供了一个users表,当用户点击一个按钮时,所有这些表都会看到相同的数据。保存在sql中并为该用户刷新数据,但是我希望一旦用户单击该按钮,就会为所有用户刷新数据。

我的想法

  1. 每秒刷新数据,这是不好的
  2. 对vb.net的SQL触发器,我需要进一步澄清!
  3. 最有效的方法是什么?

    我想在没有计时器的情况下工作!

    由于

3 个答案:

答案 0 :(得分:2)

<击>

<击>

SQL Server Notification Services

SQL提供订阅通知,提供与您的要求相关的机制。

<击> http://msdn.microsoft.com/en-us/library/ms172483(v=sql.90).aspx

  

注意:已删除,因为您之后提供的信息是您使用的是SQL Server 2008 R2

System.IO.FileSystemWatcher

的旧技巧

另一种方法是在表上创建一个SQL触发器,用于执行简单的文件时间戳更改。文件本身的大小为0字节,因此我们不会对其进行任何编写,从而使其快速运行。

然后,所有客户端都会观察此文件以进行修改,当它发生时,观察者会触发一个更改事件,您的客户只需重新加载其数据。

CREATE TRIGGER DataChanged
ON YourTable
FOR INSERT, UPDATE, DELETE
AS
    EXEC master..xsp_UpdateSignalFile 'YourTable.DataChanged'

这个CLR存储过程的想法是尽可能快地保持其可扩展性。在重负载数据服务器的情况下,甚至可以通过使用外部进程来更新文件来优化...

您可以在this MSDN article中找到与Web表单实际相关的CLR存储过程的代码,但除了此CLR过程之外,您不需要其他内容。也许解释整个系统是如何工作的。

您的客户端将使用System.IO.FileSystemWatcher来监视某些网络位置(程序将更新文件)的文件更改,并在发生更改时更新其数据。

简单而优雅的技巧,不会对数据服务器使用轮询或不必要的请求。您当然可以在几个表上有触发器,每个表都更改一个不同的文件,并根据您在客户端上显示的表单,然后您可以在表单的生命周期中观察该特定文件。当用户将上下文更改为不同的数据时,您的客户端应用程序会释放文件监视器(并为其他文件创建一个新的)。

答案 1 :(得分:0)

我猜这是一个Windows窗体应用程序,而不是一个aspx Web应用程序?我建议在某种用户引发的事件上重新加载表单。

答案 2 :(得分:0)

简单,

你做不到。您的浏览器只会提取一次数据,除了像coockies这样的东西,您的浏览器将无法记住任何内容。

你唯一的选择是每5或10个secons左右刷新一次页面。这只能使用javascript完成。 Fortunatly Visual studio为您提供某种javascript。这将阻止浏览器重新压缩。所以你每隔5秒就听不到那个klik。

在要刷新的控件周围添加更新面板。 然后添加一个postbacktrigger并将其设置为5000毫秒。

添加到“页面加载” - &gt;重新制定你的控制权。

更好的方法是添加一个只向您发送数据的web方法,但上面的工作正常并易于实现。

祝你好运。