当某些表中的数据更改时,我正在使用SqlDependency来获取通知。
private void subscribeBroker()
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
var cmd = new SqlCommand("SELECT text FROM dbo.Test");
cmd.Connection = conn;
var dependency = new SqlDependency(cmd);
dependency.OnChange += dependency_OnChange;
SqlDependency.Start(connString);
cmd.ExecuteNonQuery();
}
}
void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//Do something...
subscribeBroker();
}
它正在工作,但是我有一些问题。
1)我没有找到一种方法来获取更改哪一行的信息。我需要从整个表中读取所有数据,以查看有什么不同。有没有办法获取这些信息?(主要ID,或其他)或使用与SqlDependency不同的方法?
2)如果“某人”非常快地更改数据该怎么办。某些更改可能不会得到通知吗?(我担心通知和再次订阅之间的时间。
谢谢你。
关于1-查询通知会通知您有关事实,即某些更改。如果要获取自上次以来发生的更改,则可以使用timestamp列。
关于2-查询通知会通知您有关更改的信息,然后将其删除。然后您再次订阅通知。从删除到创建通知之间的时间就是不发送有关更改的通知的时间。
当数据不经常更改时,查询通知更适合这种情况。例如-
一些现金分类值。因此,您在某个表中订阅更改,等待更改,然后在发生更改时获得最新版本的数据。应该考虑到查询通知还使用服务器资源,因此,如果您的表很大,并且想对一些小的数据子集进行更改,那么很多查询的性能都会受到影响(例如索引视图)。
如果您需要根据更改的数据采取某些措施,并且每个更改都很重要,那么我猜触发器+服务代理可能会更有效。或者,根据您的需要,更改数据捕获。
问题内容: 这些之间的主要区别是什么?何时使用它们?我最初的理解是SqlCacheDependency使用轮询,但是我读过它对于ASP.NET 2.0来说也没有。我想知道哪种方法最适合在ASP.NET Web服务器下缓存linq查询。这将是ASP.NET 3.5。 SqlCacheDependency在论坛上 SqlCacheDependency SqlDependency 使用SQL Serve
问题内容: 这是我第一次需要使用SqlDependency,所以我希望它是我犯的一个愚蠢的错误。 我遇到的问题是,当SQL表更改时,不会触发OnChanged事件。没有错误或其他任何东西不会触发。 这是代码 在我的主窗口中 因此,预期的行为是,如果我运行以下sqlQuery,将显示一个messageBox,显示“收到消息” 谁能给我提示要检查/更改的内容吗? 我知道在依赖项中只能使用Sql功能的一
SSH代理服务即平台上的SSH服务,用于与SSH代理节点管理的虚拟机建立转发规则。 SSH代理服务即平台上的SSH服务,用于与SSH代理节点管理的虚拟机建立转发规则。系统创建完成后,会自动部署一个Pod作为SSH代理服务,当环境更新或监听地址变更时,后端将会根据实际情况更新监听地址和服务地址。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “网络/SSH代理/SSH代理服务” 菜单
SSH代理服务用于建立平台与VPC网络之间的隧道,实现平台对VPC中资源的管理。 SSH代理节点 SSH代理节点用于建立平台与VPC网络之间的通信隧道,实现平台对VPC中资源的管理,安装监控Agent,收集监控数据等。 SSH代理服务 SSH代理服务即平台上的SSH服务,用于与SSH代理节点管理的虚拟机建立转发规则。
使用代理服务器 如果你想使用代理服务器进行激活进程,可勾选这个选项。请选择“代理服务器类型”并输入“主机”、“端口”、“用户名”和“密码”。
使用代理服务器 如果你想使用代理服务器进行激活进程,可勾选这个选项。请选择“代理服务器类型”并输入“主机”、“端口”、“用户名”和“密码”。