2017-06-12 6 views
0

Hallo Ich versuche Sql Dependency in meinem Windows-Service-Code zu implementieren. Ich habe meinen Service Broker bereits als wahr gesetzt. Ich habe diesen Code in Windows On Start-Methode geschrieben. Die Methode OnDependencyChange sollte starten, sobald ein neuer Eintrag in der Tabelle vorhanden ist. Aber es passiert nie. Hier ist mein Code,SqlDependency Nicht feuern 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). 
    } 

Bitte helfen.

+0

Sie können nicht 'SELECT * FROM ...' verwenden, stattdessen 'SELECT col1, col2, col3 FROM ...'. – Maarten

+0

Danke für die Antwort Maarten. Das habe ich auch überprüft. Kein Glück. – Dezler

+0

Neben der expliziten Angabe der Spalten, die Ihnen wichtig sind, müssen Sie möglicherweise auch das Schema angeben, in dem die Tabelle existiert: 'SELECT col1, col2 FROM dbo.UserDetails'. Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass die Service Broker-Funktion in der SQL Server-Instanz aktiviert ist, mit der Sie eine Verbindung herstellen möchten. – Tom

Antwort

0

Ich denke, Sie haben ein Sicherheitsproblem. Wenn ich mich richtig erinnere, gibt es ein bekanntes Problem mit Berechtigungen für die Arbeit mit SqlDependency erforderlich. Zuerst müssen Sie die Service Broker-Funktion überprüfen und eventuell aktivieren. Dann müssen Sie query notifications aktivieren. Erst danach können Sie Ihre SqlDependency-Ereignisse aktivieren, um Datenänderungen zu erkennen: Detecting Changes with SqlDependency