查询通知建立在 Service Broker 基础结构之上,并允许在数据发生更改时向应用程序发送通知。 对提供数据库信息的缓存且需要在源数据发生更改时收到通知的应用程序(如 Web 应用程序)而言,以上功能特别有用。
Microsoft.Data.SqlClient 提供两个用于查询通知的类:
使用 SqlNotificationRequest 执行带有通知请求的命令,并自行处理 Service Broker 消息。
使用 SqlDependency 通过
OnChange事件检测更改。 Microsoft.Data.SqlClient 管理侦听器,并在事件参数中公开通知信息。
Important
请勿将 System.Data.SqlClient 用于新的开发。 请改用 Microsoft.Data.SqlClient。 ASP.NET Framework SqlCacheDependency 类需要 System.Data.SqlClient,且不与 Microsoft.Data.SqlClient 集成。 对于新的 Microsoft.Data.SqlClient 应用程序,订阅 SqlDependency.OnChange,并通过应用程序的缓存 API 使条目失效。
如果应用程序需要通过刷新显示或缓存来响应基础数据中的更改,则查询通知非常有用。 SQL Server允许 .NET 应用程序发送命令,并在同一命令生成的结果集与最初检索的结果集不同时请求通知。 服务器上生成的通知是通过这些队列发送的,以便在稍后进行处理。
可以设置对 SELECT 和 EXECUTE 的通知。 使用EXECUTE语句时,SQL Server为执行的命令注册通知,而不是EXECUTE语句本身。 该命令必须满足 SELECT 语句的要求和限制。 当注册通知的命令包含多条语句时,数据库引擎将为批处理中的每条语句创建一个通知。
如果您正在开发需要在数据发生更改时提供可靠的次秒级通知的应用程序,请查看通知计划一文中的规划高效的查询通知策略和查询通知的替代方法章节。 有关查询通知和 SQL Server Service Broker 的更多信息,请参见以下指向“SQL Server 文档”中文章的链接。
SQL Server 文档
本节内容
启用查询通知介绍如何使用查询通知,其中包括启用和使用查询通知的要求。
使用 SqlDependency 检测更改演示如何检测查询结果与最初接收的结果不同的情况。
使用 SqlNotificationRequest 执行 SqlCommand 演示如何为查询通知配置 SqlCommand 对象。
参考
SqlNotificationRequest 介绍 SqlNotificationRequest 类及其所有成员。
SqlDependency 介绍 SqlDependency 类及其所有成员。
SqlCacheDependency介绍 System.Data.SqlClient 的 ASP.NET Framework 缓存依赖项类。 它不会封装 Microsoft.Data.SqlClient 依赖项。