SQL Server-Benachrichtigungen - Mein OnChange nicht ausgelöst
Möchte ich die Verwendung der SQL Server-Meldungen zu erfassen, legen Sie Ereignisse in meiner Datenbank in einer winforms app. Ich bin versucht, verwenden Sie die SQLDependency-Objekt. In den MSDN-Artikeln machen, diese scheinen ziemlich geradlinig. So habe ich eine kleine Beispiel-Anwendung, um es zu versuchen. Das event scheint nur auf Feuer, als ich in meine Anwendung das erste mal(MessageBox angezeigt). Einfügen von Daten in die Tabelle nicht erhöhen, das OnChange-Ereignis, wie es scheint. Kann mir jemand sagen was mir fehlt? Danke!
public Main()
{
InitializeComponent();
var check = EnoughPermission();
SqlDependency.Stop(constr);
SqlDependency.Start(constr);
if(connection == null)
{
connection = new SqlConnection(constr);
}
if(command == null)
{
command = new SqlCommand("Select ID, ChatMessage FROM dbo.Chat",connection);
}
connection.Open();
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
command.ExecuteReader();
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
MessageBox.Show("Change!");
}
- Wo sind Sie die Daten einfügen? Eine SELECT-Anweisung ist nicht ein INSERT.
- Ich bin das einfügen der Daten in einer Query analyzer.. Guten Ruf auf dem INSERT nicht ein WÄHLEN Sie:") Die Option ist erforderlich, um zu bestätigen, um die Datenbank, die Daten sind gerade für Benachrichtigungen.
- Beachten Sie, dass ich die übergabe, die Sie AUSWÄHLEN, um die SqlDendency obj..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während ich arbeiten war in der Umsetzung des Abfrage-Benachrichtigung, ich habe genaue das problem. Ich überprüfte alle Konfigurationen, code-Stücke, und auch TCP-Einstellungen, aber nichts half. Dann habe ich herausgefunden, das folgende Abfrage ausführen, auf die Datenbank und es ist mein problem gelöst. Vielleicht können Sie es versuchen.
The proposed new database owner is already a user or aliased in the database.
Ihre erste Benachrichtigung ist die einzige Benachrichtigung, die Sie erhalten. Query-Benachrichtigungen sind nicht ein Abonnement für änderungen, nachdem eine Benachrichtigung ausgelöst wird, ist es auch ungültig. Sie sollen re-senden Sie eine neue Benachrichtigungs-Abonnement.
Wenn Ihre Abfrage ist benachrichtigt immedeatly es bedeutet, dass Sie nicht bekommen eine Benachrichtigung für eine Veränderung, sondern für eine ungültige Abfrage ist. Überprüfen Sie die Werte der SqlNotificationEventArgs argument, die Sie erhalten. Überprüfen Sie die Info zu Einfügen/Aktualisieren/Löschen, überprüfen Sie die Quelle werden Daten, überprüfen Sie die Geben zu Ändern.
Haben Sie einen Blick auf die Watcher Anwendung Beispiel, um besser zu verstehen, wie Sie sollen erneut abonnieren, wenn mitgeteilt. Für ein besseres Verständnis, wie die Query-Benachrichtigungen funktionieren, siehe Die Mysteriöse Meldung.