2017-06-12 120 views
0

嗨我想實現Sql依賴到我的Windows服務代碼。我已經把我的服務經紀人設置爲真實。我在Windows On Start方法中編寫了此代碼。 OnDependencyChange方法應該在表中有新條目時立即開始。但它從未發生過。 這裏是我的代碼,SqlDependency沒有觸發c#

 System.Data.SqlClient.SqlDependency.Start("connection 
     string;database=dbName;Integrated Security=True;"); 
     SqlConnection connection = new SqlConnection("connection 
     string;database=dbName;Integrated Security=True;"); 
     connection.Open(); 
     using (SqlCommand command = new SqlCommand("SELECT * FROM 
     UserDetails", connection)) 
     { 


      SqlDependency dependency = new SqlDependency(command); 



      dependency.OnChange += new 
       OnChangeEventHandler(OnDependencyChange); 


      using (SqlDataReader reader = command.ExecuteReader()) 
      { 
       // Process the DataReader. 
      } 
     } 



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

請幫助。

+0

您不能使用'SELECT * FROM ...',而是使用'SELECT col1,col2,col3 FROM ...'。 – Maarten

+0

感謝您的回覆Maarten。我也檢查過。沒有運氣.. – Dezler

+0

除了明確指定您關心的列外,您還可能需要指定表中存在的模式 - 「SELECT col1,col2 FROM dbo.UserDetails」。如果它仍然不起作用,請確保您試圖連接的SQL Server實例上的Service Broker功能已啓用。 – Tom

回答

0

我認爲你有安全問題。如果我沒有記錯的話,有一個使用SqlDependency所需的權限的已知問題。 首先,您需要驗證並最終啓用Service Broker功能。 然後,您需要啓用query notifications。在此之後,您可以啓用您的SqlDependency事件來檢測數據修改:Detecting Changes with SqlDependency