.Net SQL Server 数据库监控 - 插入、更新、删除

标签 .net sql-server database monitoring

有谁知道从 .Net 应用程序监视 SQL Server(2005 或 2008)数据库中表记录更改的方法?它需要能够同时支持多个客户端。每个客户端在启动时都会“订阅”,退出时会“取消订阅”。多个用户可以同时访问系统,我想在其他用户客户端上反射(reflect)他们的更改。然后,当客户端处理更改事件时,它可以更新代表该记录的本地对象。有点类似于 Access 更新被修改的记录如何反射(reflect)在引用它的每个表单中。

我知道微软有用于与 SQL Server 交互的 Microsoft.SqlServer 库。但我不确定哪个概念适用于我想做的事情(或者哪些概念可以适用于我想做的事情)。听起来可能有用的是管理类或复制类。

预料到有人会问,“为什么不偶尔重新查询表以查找新信息?”我有大量要监控的表,这会很麻烦。另外,如果我正在寻找更优雅的东西。

我愿意接受建议...

最佳答案

要在 SQL 2005+ 中监控 SQL 表或记录的更改,您可以使用 SqlDependency 类。

它的目标是在 ASP.NET 或中间层服务中使用,其中单个服务器管理针对数据库的事件订阅 - 而不是数百个管理订阅的客户端。根据您所指的最大客户端数量,您可能希望构建一个缓存池服务,该服务可以管理针对您的客户端的 SQL 通知订阅。

在它内部使用 SqlNotificationRequest,它使用 Service Broker,而不是 Notification Services。因此,这应该在 SQL 2008 等上继续工作。

MSDN for SqlDependency

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);
}

Using and Monitoring SQL 2005 Query Notifications”文章介绍了在您的代码中设置它的步骤(以网络应用为例)以及订阅 Service Broker 所需的适当 SQL 权限等。

ASP.NET (web caching)类也可用于 Web 场景。

关于.Net SQL Server 数据库监控 - 插入、更新、删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342031/

相关文章:

sql-server - 使用 join 检索不匹配的记录

sql - 搜索此产品数据库的最佳方式是什么?

拥有数千张表的 MySQL 数据库

python - 每次在 django 中创建另一行时创建一行

c# - 窗体最大化时自动缩放子控件

c# - 解析字符串以进行谓词

c# - 通用扩展方法歧义

.net - ASP.NET 2.0 IIS 设置

sql-server - 当同一标志更改为下一行中的其他标志时,获取该标志的唯一行号?

python - 进行此搜索的最有效方法是什么(mysql 或文本)?