共用方式為


啟用查詢通知

取用查詢通知的應用程式有一組常見的需求。 您的數據源必須正確設定為支援 SQL 查詢通知,而且用戶必須具有正確的客戶端和伺服器端許可權。

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

  • 啟用資料庫的查詢通知。

  • 請確定用來連線到資料庫的使用者標識碼具有必要的許可權。

  • 使用SqlCommand物件來執行有效的 SELECT 語句,並搭配相關聯的通知物件——SqlDependencySqlNotificationRequest

  • 提供程式代碼,以在受監視的數據變更時處理通知。

查詢通知的要求

只有符合特定需求的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]);

查詢通知許可權

執行要求通知命令的用戶必須在伺服器上具有 SUBSCRIBE QUERY NOTIFICATIONS 資料庫許可權。

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

下列程式代碼會建立SqlClientPermission物件,並設定PermissionStateUnrestricted。 如果呼叫堆疊中所有較高的呼叫者都未被授予權限, 將在執行時強制

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

private bool CanRequestNotifications()
{
    SqlClientPermission permission =
        new SqlClientPermission(
        PermissionState.Unrestricted);
    try
    {
        permission.Demand();
        return true;
    }
    catch (System.Exception)
    {
        return false;
    }
}
' Code requires directives to
' System.Security.Permissions and
' System.Data.SqlClient

Private Function CanRequestNotifications() As Boolean

    Dim permission As New SqlClientPermission( _
      PermissionState.Unrestricted)

    Try
        permission.Demand()
        Return True
    Catch ex As Exception
        Return False
    End Try

End Function

選擇通知物件

查詢通知 API 提供兩個物件來處理通知: SqlDependencySqlNotificationRequest。 一般而言,大部分 non-ASP.NET 應用程式都應該使用 SqlDependency 物件。 ASP.NET 應用程式應該使用較高層級 SqlCacheDependency,其會 SqlDependency 包裝並提供管理通知和快取對象的架構。

使用 SqlDependency

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

此外,SqlDependency 會自動啟動工作者執行緒,在通知被張貼到佇列時處理這些通知;它也會剖析 Service Broker 訊息,將資訊呈現為事件引數資料。 SqlDependency 必須藉由呼叫 Start 方法來初始化 ,才能建立資料庫的相依性。 這是靜態方法,在應用程式初始化期間只需要針對每個資料庫連接呼叫一次。 應在應用程式終止時呼叫 Stop 方法,針對已建立的每個相依連線。

使用 SqlNotificationRequest

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

另請參閱