3

在一个 VB.net 应用程序中,我有一个 SQL 接口,我users在 SQL 数据库中有一个表供该应用程序的用户使用,当用户单击按钮时,他们现在都看到相同的数据,更改保存在 sql 中并刷新数据对于该用户,但是我希望在某些用户单击该按钮后立即为所有用户刷新数据。

我的想法

  1. 每秒刷新数据,不好
  2. 我需要更多说明的 vb.net 的 SQL 触发器!

什么是最有效的方法?

我想要一个没有计时器的工作!

谢谢

4

3 回答 3

2

SQL Server 通知服务

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 存储过程的想法是尽可能快地保持它的可伸缩性。在重负载数据服务器的情况下,这甚至可以通过使用外部进程更新文件来优化......

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

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

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

于 2012-11-27T12:41:47.957 回答
0

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

于 2012-11-27T12:30:18.890 回答
0

简单的,

你不能那样做。你的浏览器只提取一次数据,除了一些像 cookie 这样的东西,你的浏览器不会记住任何东西。

您唯一的选择是每 5 或 10 秒左右刷新一次页面。这只能使用 javascript 来完成。幸运的是,Visual Studio 为您提供了某种 javascript。这将阻止浏览器刷新。因此,您不会每 5 秒听到一次咔哒声。

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

添加到“页面加载”->重新调整您的控件。

更好的方法是添加一个只会向您发送数据但以上工作正常且易于实现的网络方法。

祝你好运。

于 2012-11-27T12:36:12.560 回答