Kann jemand Beispielcode posten oder mir mitteilen, wie ich einen Listener einrichten soll, um mich zu benachrichtigen (ein Ereignis auszulösen), wenn eine neue Zeile in eine SQL Server-Datenbank eingefügt wird?
Ich möchte keinen der Messaging- oder Broker-Dienste von SQL Server verwenden. Ich habe derzeit einen Datei-Listener, der mich benachrichtigt, wenn neue Zeilen an eine flache Datei angehängt werden. Ich möchte das Gleiche für eine Datenbanktabelle tun.
Suchen Sie vielleicht nach der Klasse SqlDependency , die dies zulässt Ihr Coderegister wird benachrichtigt, wenn Änderungen auftreten?
SqlDependency
eignet sich ideal für Caching-Szenarien, in denen Ihre ASP.NET-Anwendung oder der Dienst der mittleren Schicht bestimmte Informationen im Speicher zwischenspeichern müssen. MitSqlDependency
können Sie Benachrichtigungen erhalten, wenn sich die ursprünglichen Daten in der Datenbank ändern, sodass der Cache aktualisiert werden kann.
Oder fällt dies in den Bereich der Dinge, die Sie nicht zulassen, ist es nicht ganz klar?
Sie müssten beim Einlegen oder Abfragen der Datenbank eine Art Datenbank-Trigger ausführen, um nach neuen Datensätzen zu suchen. Ich empfehle den letzteren Vorschlag nicht, da dies sehr leistungsintensiv sein kann.
Abgesehen davon geben Sie uns nicht viel weiter. Welche Version von SQL Server verwenden Sie? Was hast du schon probiert? Auf welche Probleme sind Sie gestoßen?
Hier sind ein paar Links, die Sie in die richtige Richtung weisen könnten:
Vorgehensweise: Erstellen und Ausführen eines CLR SQL Server-Triggers
Eine ähnliche Frage, die einen alternativen (besseren?) Weg vorschlägt: Können SQL CLR-Trigger dies tun? Oder gibt es einen besseren Weg?
Sie können dazu SQL-Benachrichtigungen verwenden, aber Sie haben gesagt, dass Sie den Broker nicht verwenden möchten. Andernfalls können Sie abfragen, aber wie erwähnt, kann dies zu Leistungsproblemen führen.
Eine andere Möglichkeit besteht darin, Trigger in der Datenbanktabelle zu verwenden, um eine Datei im Dateisystem zu berühren.
%Vor%Verwenden Sie dann einen FileSystemWatcher , wie Sie bereits erwähnt haben, dass Sie bereits in Ihrem tun Anwendung, um eine Benachrichtigung zu erhalten, wenn sich die Datei ändert.
Es gibt Sicherheitsberechtigungen , die Sie verwenden werden müssen Ihrem Sql-Server-Benutzer gewähren, um das möglich zu machen, aber wenn das akzeptabel ist, dann funktioniert das, ohne den Vermittler zu benutzen.
Ich empfehle auch Trigger, der irgendwo in db Einfügungen registriert (und Sie müssen die Datenbank sowieso abfragen, was nicht so teuer ist, wenn der Trigger eine spezielle Tabelle mit einer einzelnen Zeile modifiziert). Aber wenn Sie IDENTITY auf Ihrem Primärschlüssel haben, können Sie den Wert der aktuellen Identität der Tabelle überwachen:
%Vor%Es ist ein Hack, aber es ist schnell und Sie müssen Ihre Datenbank nicht ändern (natürlich funktioniert es nur für Einfügeoperationen). Sie können jedoch Einfügungsoperationen überspringen, wenn der Identitätswert zwischen Umfragen explizit geändert wurde und genau auf den Wert gesetzt wurde, der zum Zeitpunkt des vorherigen Abfragens vorhanden war (was jedoch nicht sehr wahrscheinlich ist).
Ich würde CLR-Trigger in Betracht ziehen, Bitte lesen Sie die folgenden Artikel ...
Tags und Links triggers sql-server c# listener