在一个VB.net应用程序中,我有一个SQL界面,我在SQL数据库中为这个应用程序的用户提供了一个users
表,当用户点击一个按钮时,所有这些表都会看到相同的数据。保存在sql中并为该用户刷新数据,但是我希望一旦用户单击该按钮,就会为所有用户刷新数据。
我的想法
最有效的方法是什么?
我想在没有计时器的情况下工作!
由于
答案 0 :(得分:2)
<击> 撞击>
<击>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方法,但上面的工作正常并易于实现。
祝你好运。