2010-08-03 4 views
7

Je veux créer une petite application qui affiche une notification de bac (ou un toast popup ou quelque chose) chaque fois qu'une mise à jour ou insérer dans une table donnée dans une base de données SQL Server.notification de la base sur la base de données

Quelle est la manière la plus simple de le faire car je veux éviter d'interroger si possible?

+0

bonnes réponses ci-dessous, mais je dirais que le scrutin est en fait la façon la plus simple. Il a ses inconvénients, parfois des inconvénients assez graves, mais la complexité n'en fait pas partie. –

Répondre

7

Query Notifications. C'est la fonction SQL Server qui permet à une application de s'abonner aux notifications envoyées par le serveur lorsque les données sont modifiées. Il est généralement exploité par la classe SqlDependency.

J'ai récemment posté le LinqToCache project qui vous permet d'ajouter des notifications à base de SqlDependency et l'invalidation du cache de requêtes LINQ:

var query = (from r in ctx.table select r).AsCached(
"table", new CachedQueryOptions() { 
    OnInvalidated = (sender, args) { 
     // the query was invalidated, data has changed 
     // refresh display or notify user 
    } 
}); 
2

Les procédures stockées étendues sont ce que j'ai pensé en premier, et sont probablement la solution que j'utiliserais si je voulais exécuter l'application de surveillance sur le serveur SQL lui-même. Mais je suppose que ce n'est probablement pas le cas. Je suggère d'utiliser MSMQ en tant que couche intermédiaire, étant donné qu'il s'agit de presque toutes les versions de Windows de nos jours et qu'il est plus ou moins fait sur mesure pour ce genre de choses. Alors, en passant par les couches, ici, vous avez:

  1. UPDATE et INSERT se déclenche sur votre certaine table, qui appelle ...
  2. ... un ensemble de .NET (ajoutés à l'aide de l'intégration CLR), qui ...
  3. ... met un message décrivant l'insertion/mise à jour dans une file d'attente MSMQ sur le serveur, qui ...
  4. ... est reçu par votre application de plateau, où il fonctionne ...
  5. ... puis affiché.

Il y a des exemples de code pour accéder à MSMQ de SQL Server ici: http://www.codeproject.com/KB/database/SqlMSMQ.aspx

+0

+1, mais l'article indique que la meilleure façon de le faire est l'utilisation de la liste de révocation de certificats, et cela n'est disponible que depuis SQL Server 2005 – Unreason

+0

Juste commentaire, j'aurais dû le mentionner. Pour développer cela, vous pouvez également utiliser cette technique en utilisant une procédure stockée étendue pour appeler MSMQ afin de mettre votre notification d'insertion/mise à jour en file d'attente et bénéficier des avantages si votre application de surveillance est exécutée sur une machine distante . Mais, franchement, si vous êtes sur SQL 2005 ou plus tard et que vous pouvez le faire de la manière CLR, je suggère fortement que vous le fassiez de cette façon. C'est beaucoup plus facile à mettre en œuvre. :) Merci! – Cerebrate

Questions connexes