在 VB.net 应用程序中,我有一个 SQL 接口(interface),我在 SQL 数据库中有一个 users
表供此应用程序的用户使用,现在当用户单击按钮更改保存在 sql 中,并为该用户刷新数据,但是我希望在某些用户单击该按钮后立即为所有用户刷新数据。
我的想法
- 每秒刷新一次数据,这样不好
- SQL 触发器到 vb.net,我需要更多说明!
什么是最有效的方法?
我想要一个没有计时器的解决方法!
谢谢
最佳答案
<罢工>罢工>
<罢工>SQL Server 通知服务
SQL 提供通知订阅,提供与您的要求相关的机制。
罢工><罢工> http://msdn.microsoft.com/en-us/library/ms172483(v=sql.90).aspx 罢工>
Note: removed since you later provided info you're using 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 中找到 CLR 存储过程的代码这实际上与 Web 表单相关,但除了此 CLR 过程外,您不需要其他任何东西。可能还会解释整个系统的工作原理。
您的客户将使用 System.IO.FileSystemWatcher
监视某些网络位置上的文件更改(程序将在其中更新文件)并在发生更改时更新其数据。
简单而优雅的技巧,不对数据服务器使用轮询或不必要的请求。您当然可以在多个表上设置触发器,每个表更改不同的文件,并且根据您在客户端上显示的表单,您将在表单的生命周期内查看该特定文件。当用户将上下文更改为不同的数据时,您的客户端应用程序会释放文件观察器(并为不同的文件创建一个新的所需的观察器)。
关于sql - 如何在其他用户编辑数据时刷新其他用户界面上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584220/