有谁知道从.Net应用程序监视SQL Server(2005或2008)数据库中的表记录更改的方法?它需要能够一次支持多个客户端.每个客户端在启动时都会"订阅",并在退出时"取消订阅".多个用户可以立即访问系统,我想在其他用户客户端上反映他们的更改.然后,当客户端处理更改事件时,它可以更新它表示该记录的本地对象.类似于修改的Access更新记录的方式反映在引用它的每个表单中.
我知道microsoft有他们的Microsoft.SqlServer库用于与SQL Server交互.但我不确定哪个概念适用于我想做的事情(或者可以弯曲以适用于我想做的事情).听起来可能有用的是管理者或复制者.
期待有人问,"你为什么不偶尔重新询问桌子以寻找新的信息?" 我有大量的桌子需要监控,这对屁股很痛苦.此外,如果我正在寻找更优雅的东西.
我愿意接受建议......
要监视SQL 2005+中SQL表或记录的更改,可以使用SqlDependency类.
它的目标是在ASP.NET或中间层服务中使用,其中单个服务器正在管理针对数据库的活动订阅 - 而不是数百个管理订阅的客户端.根据您引用的最大客户端数量,您可能需要构建一个缓存池服务,该服务可以管理针对客户端的SQL的通知订阅.
在里面它使用SqlNotificationRequest,它使用Service Broker,而不是Notification Services.因此,这应该在SQL 2008等上继续工作.
SqlDependency的MSDN
void Initialization() { // Create a dependency connection. SqlDependency.Start(connectionString, queueName); } void SomeMethod() { // Assume connection is an open SqlConnection. // Create a new SqlCommand object. SqlCommand command=new SqlCommand( "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", connection); // Create a dependency and associate it with the SqlCommand. SqlDependency dependency=new SqlDependency(command); // Maintain the refence in a class member. // Subscribe to the SqlDependency event. dependency.OnChange+=new OnChangeEventHandler(OnDependencyChange); // Execute the command. command.ExecuteReader(); // Process the DataReader. } // Handler method void OnDependencyChange(object sender, SqlNotificationsEventArgs e ) { // Handle the event (for example, invalidate this cache entry). } void Termination() { // Release the dependency. SqlDependency.Stop(connectionString, queueName); }
" 使用和监视SQL 2005查询通知 "一文,介绍了在代码中设置它的步骤(使用Web应用程序作为示例)以及订阅Service Broker所需的相应SQL权限等.
一个ASP.NET(网页缓存)类也可用于Web方案.