sql - 如何在其他用户编辑数据时刷新其他用户界面上的数据

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

在 VB.net 应用程序中,我有一个 SQL 接口(interface),我在 SQL 数据库中有一个 users 表供此应用程序的用户使用,现在当用户单击按钮更改保存在 sql 中,并为该用户刷新数据,但是我希望在某些用户单击该按钮后立即为所有用户刷新数据。

我的想法

  1. 每秒刷新一次数据,这样不好
  2. 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/

相关文章:

mysql - 使用多个表创建有效查询

c# - 制作一个完全透明的矩形(窗口中的一个洞)WPF

asp.net - 页面渲染时显示 Ajax Loader

WPF 路径与图像 png jpg

vb.net - 在 VB.NET 中调用过程的优缺点是什么?

sql - 将平面表解析为树的最有效/优雅的方法是什么?

mysql - SQL 仅选择列上具有最大值的行

sql - 为数据库中的单个字段存储多个值

c# - 在资源字典中包含的 DataTemplate 中创建 CheckBox Checked 事件

c# - 使用 XAML/WPF 的路径/矢量的(自动)动画