共用方式為


啟用查詢通知

下載 ADO.NET

取用查詢通知的應用程式有一組常見需求。 您必須正確設定資料來源才能支援 SQL 查詢通知,而且使用者必須具有正確的用戶端及伺服器端權限。

若要使用查詢通知,您必須:

  • 啟用資料庫的查詢通知。
  • 確定用來連線到資料庫的使用者識別碼具備必要權限。
  • 使用 SqlCommand 物件搭配關聯的通知物件 (SqlDependencySqlNotificationRequest) 執行有效 SELECT 陳述式。
  • 提供程式碼來處理受監視的資料發生變更時要發出的通知。

查詢通知需求

只有符合一組特定需求的 SELECT 陳述式才支援查詢通知。 下表提供 SQL Server 線上叢書中 Service Broker 與查詢通知文件的連結。

SQL Server 文件集

啟用查詢通知以執行範例程式碼

若要透過使用 SQL Server Management Studio,在 AdventureWorks 資料庫上啟用 Service Broker,請執行下列 Transact-SQL 陳述式:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

為了讓查詢通知範例正確執行,必須在資料庫伺服器上執行下列 Transact-SQL 陳述式。

CREATE QUEUE ContactChangeMessages;

CREATE SERVICE ContactChangeNotifications
  ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

查詢通知權限

若使用者執行的命令會要求通知,則必須有伺服器上的訂閱查詢通知資料庫權限。

在部分信任狀況下執行的用戶端程式碼需要 SqlClientPermission

下列程式碼會建立將 PermissionState 設定為 UnrestrictedSqlClientPermission 物件。 如果在呼叫堆疊中較高的所有呼叫者都尚未獲授與權限,Demand 將會在執行階段強制執行 SecurityException

using Microsoft.Data.SqlClient;
using System.Security.Permissions;

class Program
{
    static void Main()
    {
    }

    // Code requires directives to
    // System.Security.Permissions and
    // Microsoft.Data.SqlClient

    private bool CanRequestNotifications()
    {
        SqlClientPermission permission =
            new SqlClientPermission(
            PermissionState.Unrestricted);
        try
        {
            permission.Demand();
            return true;
        }
        catch (System.Exception)
        {
            return false;
        }
    }
}

選擇通知物件

查詢通知 API 提供兩個物件來處理通知:SqlDependencySqlNotificationRequest

使用 SqlDependency

若要使用 SqlDependency,所使用的 SQL Server 資料庫必須啟用 Service Broker,且使用者必須具有接收通知的使用權限。 系統會預先定義 Service Broker 物件,例如通知佇列。

此外,SqlDependency 會自動啟動背景工作執行緒,以在通知張貼至佇列時處理這些通知。 其也會剖析 Service Broker 訊息,將資訊當作事件引數資料公開。 SqlDependency 必須透過呼叫 Start 方法來初始化,以建立對資料庫的相依性。 Start 是靜態方法,只需要在應用程式初始化期間針對每個必要的資料庫連接呼叫一次。 對於每個進行的相依性連線,Stop 方法應該在應用程式終止時呼叫。

使用 SqlNotificationRequest

相反地,SqlNotificationRequest 需要您自行實作整個接聽基礎結構。 此外,必須定義所有支援的 Service Broker 物件,例如佇列、服務與佇列所支援的訊息類型。 如果您的應用程式需要特殊的通知訊息或通知行為,或如果您的應用程式是較大型 Service Broker 應用程式的一部分,此手動方法就很有用。

下一步