2017-07-10 53 views
1

我想檢查出SqlDependency但開始時遇到問題。我正在使用下面的代碼(這是從https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/detecting-changes-with-sqldependency)。C#SqlDependency - 無效的對象名

錯誤「System.Data.SqlClient.SqlException:'運行方法SqlDependency.Start(connString,queue)時引發'無效對象名'[core]。[intServiceClient_Queue]'。'」。

我在Sql Server Admin帳戶上連接SSPI。我確定該對象是服務代理隊列並存在。

void Initialization() 
{ 
    // Create a dependency connection. 
    SqlDependency.Start(connectionString, queueName); 
} 

void SomeMethod() 
{ 
    // Assume connection is an open SqlConnection. 

    // Create a new SqlCommand object. 
    using (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. 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      // Process the DataReader. 
     } 
    } 
} 

// Handler method 
void OnDependencyChange(object sender, 
    SqlNotificationEventArgs e) 
{ 
    // Handle the event (for example, invalidate this cache entry). 
} 

void Termination() 
{ 
    // Release the dependency. 
    SqlDependency.Stop(connectionString, queueName); 
} 
+0

檢查數據庫,看看對象(表,存儲過程,視圖等)命名[ core]。[intServiceClient_Queue]存在。 –

回答

1

這是SqlDependency中的缺陷/缺點:它不支持模式名稱。 [core].[intServiceClient_Queue]被視爲一個對象的名稱並轉義,產生一個無效的對象名稱。將您的隊列移動到您的用戶的默認模式(很可能是dbo),或者將默認模式設置爲core,並將模式限定爲其他所有內容。

+0

你說得對。但這很奇怪。在發佈問題之前,我在dbo模式中創建了同義詞,但它也不能正常工作。 –

+0

@michałkudanowski:連接分析器並查看在後臺生成的查詢。你一定會發現一些無法正確使用同義詞的東西(與基礎對象名稱相反)。 –