2009-11-19 5 views
1

J'ai posté un article similaire à ce sujet auparavant, mais depuis, j'ai fait des recherches et j'ai pensé que je le referais pour voir si quelqu'un avait des idées sur mon problème .Mettre à jour la source de données databound en C# lorsque les données de la base de données changent

Je cours une application WPF avec C# comme le code beind. La base de données que j'utilise est SQL Server 2005.

Maintenant, je suis en train de lier la base de données en utilisant ADO.Net et en récupérant les données des procs stockés dans la base de données. Ceci est ensuite stocké dans les ensembles de données et plus bas sur la ligne liée aux contrôles dans mon application WPF.

Maintenant, les données auxquelles je suis lié dans la base de données changent constamment, disons toutes les quelques secondes. Ce que je veux est un mécanisme pour me dire automatiquement en C# quand les données que j'ai liées à la base de données, ainsi les données retournées par mes procs stockés ont changé.

J'ai regardé sur le Web et trouvé des services de notification et la classe SQLDependency mais ceci est obsolète. J'ai aussi vu CLINQ mais cela ne semble pas gérer le côté notification de la base de données, il ne fonctionne que pour les collections en C# de ce que je comprends. Je veux dire que la méthode du plan B consiste simplement à avoir un thread dans mon code C# pour interroger le même proc stocké toutes les quelques secondes en fonction d'un horodatage qui est stocké sur chaque ligne dans l'ensemble de données retourné. Si mon horodatage actuel est supérieur à ce qui est retourné, alors récupérez ces données. Cela fonctionnerait alors dans ce nouveau thread en boucle encore et encore. Si des données ont été renvoyées à partir de la connexion dans le thread, cela signifie que les données ont changé et donc stocker ces données dans mes collections dans C# afin qu'elles puissent être liées à mon application WPF.

De toute évidence, c'est quelque chose que je ne veux pas vraiment faire car je pensais qu'il y aurait peut-être une façon plus intelligente de le faire, mais je n'arrive pas à trouver quoi que ce soit.

Est-ce que quelqu'un a des idées sur celui-ci?

Très apprécié Iffy.

Répondre

0

qu'en est-il des déclencheurs SQL CLR? déclencheurs SQL peuvent être exécutées à chaque fois qu'une mise à jour/insertion/suppression se produit dans les tableaux ciblés dans votre base de données et il semble CLR triggers SQL étendre cette fonctionnalité à code managé:

http://msdn.microsoft.com/en-us/library/938d9dz2(VS.80).aspx

pas un expert en la matière, mais nous espérons qu'il vous donnera quelque chose d'utile à regarder.

0

Plan B sonne comme un bon choix pour moi - il n'y a pas de méthodes de notification intégrées à SQL Server pour vous permettre de le faire, afin que vos seules options serait:

  1. Déclencheurs combinés avec l'utilisateur CLR fonctions définies. Le problème est que selon la quantité de travail que vous faites dans votre fonction utilisateur défini cela pourrait ajouter beaucoup de frais généraux pour tous ceux qui écrit à la base de données - ce n'est pas la couche la plus efficace de mettre en œuvre un mécanisme de notification
    • . Implémentez une sorte de mécanisme de notification et assurez-vous que tous ceux qui écrivent dans la base de données utilisent ce mécanisme de notification pour notifier aux autres que les données ont changé.

Considérant combien d'effort # 2 est, je dirais que ce plan B est un très bon choix.En fonction de la fréquence d'interrogation et de l'efficacité de votre interrogation, vous trouverez probablement que l'effet final pour l'utilisateur est tout aussi bon que l'option n ° 2, et que le temps nécessaire à cette opération est probablement inférieur à pense. (Si vous avez beaucoup d'utilisateurs, vous pouvez utiliser des techniques comme la mise en cache/un thread d'interrogation commun pour aider)

Questions connexes