2010-07-29 8 views
17

Ich möchte auf Änderungen an Daten in einer SQL Server-Datenbank von C# hören. Ich hatte gehofft, dass es irgendeine Art von Listener geben würde, mit der ich feststellen könnte, ob die Daten, die ich habe, veraltet sind. Obwohl es sich um ein ziemlich häufiges Szenario handelt, kann ich keine Lösungen finden, die nicht einfach die Datenbank abfragen.SQL Server Datenbank Change Listener C#

Ich benutze Linq-To-SQL auf die Daten zugreifen und damit ein Datacontext Objekt, ich habe gehofft, dass ich für ein auf Daten geändert Ereignis hören könnte, aber ich kann nicht scheinen, einen zu finden.

Ich schätze, dass es eine nicht-triviale Barriere ist (Von C# -Methode zu SQL Server DB), der Grund, warum ich erwartet hatte, dass dies ein gelöstes Problem ist, ist, dass es eine häufige Anforderung für GUIs ist. Wenn es nicht möglich ist, nach Updates zu suchen, wie Sie die in einer GUI angezeigten Daten frisch halten (wenn sie von einer SQL Server-Datenquelle unterstützt werden).

Obwohl dies nicht für GUI-Arbeit ist, habe ich erwartet, etwas aus diesem Bereich anzupassen.

Gibt es eine Möglichkeit, Datenbankänderungsereignisse in C# zu abonnieren?

Antwort

5

Sie suchen nach dem SqlDependency class, mit dem Sie auf Änderungen an der Ergebnismenge einer SQL-Abfrage warten können.

3

Der DataContext bietet Ihnen keine Art von Listener-Funktionalität mit SQL Server. Am besten erstellen Sie eine Abfrageanwendung oder sogar einen separaten Thread, der die Datenbank regelmäßig auf Änderungen abfragt und ein Ereignis anzeigt, auf das Ihre Hauptanwendung zugreifen kann.

0

Ich würde eine Tabelle mit einer einzelnen Zeile in der Datenbank verwenden, um zuletzt aktualisierte, eingefügte oder gelöschte Ereignisse zu katalogisieren und dann Trigger für jede wichtige Tabelle zu erstellen, um diese Tabelle zu aktualisieren und dann diese Tabelle auf Änderungen abzufragen.

+0

Dies würde für schnell wechselnde DBs nicht funktionieren, da Sie die Tabelle ständig überwachen müssen, und noch schlimmer, es gibt keine Garantie, dass Sie Änderungen zwischen den Prüfungen nicht überspringen. – PedroC88