2010-09-22 7 views
2

J'ai une application winforms C# qui a un seul datagridview pour afficher le contenu d'une table dans une base de données mySQL. Est-il possible d'avoir le datagridview refléter les changements à la base de données en temps réel? c'est-à-dire lorsque je fais une modification directe de la table, cela montrera que le changement dans le datagridviewest-il possible d'avoir une mise à jour de datagridview automatiquement lorsque la base de données est mise à jour?

Répondre

-1

Il est possible, oui, actuellement conseillé, probablement non. La technologie que vous recherchez est appelée "comet" et est une architecture de type serveur-poussoir. Dans une application web, cela va à l'encontre de ce qui est actuellement supporté, fiable et facilement maintenable. Les options incluent l'exécution d'un serveur Web à partir du navigateur et de faire des rappels et des conversations persistantes de xmpp mais aucun qui est vraiment attrayant à moins que vous ayez absolument besoin de ce comportement maintenant.

HTML 5 arrive avec web sockets qui devrait rendre ce comportement souhaitable plus accessible, mais il faudra probablement attendre quelques années avant qu'un large soutien se produise. Envisagez d'interroger un service Web en utilisant ajax et en effectuant des actualisations de pages partielles et sélectives plutôt que d'implémenter une véritable architecture push http.

+0

Il parle Winforms, pas Webforms. –

+0

oups ... ma réponse est complètement indépendante: ( – Tahbaza

0

La réponse courte est non. Vous devrez mettre en place une sorte de mécanisme d'interrogation. Si cette fonctionnalité était d'une importance significative pour votre application, SQL Server 2008 R2 dispose d'une technologie appelée StreamInsight qui vous permet, au niveau de la base de données, de regarder le flux de données (avant même qu'il atteigne le disque) et de déclencher des événements et en théorie, il peut être possible d'utiliser un mécanisme pour déclencher les mises à jour dans votre application. Je suis assez certain que MySQL ne contient pas de technologie comparable.

Ce ne serait également que "en temps quasi réel". Je suppose que vous voulez dire que vous voulez que le DataGrid soit mis à jour chaque fois qu'il y a de nouvelles données, ce qui ne serait pas en temps réel.

0

C'est théoriquement possible, mais c'est très gênant et ne semble pas très natif pour travailler avec des bases de données. D'une manière générale, les DB constituent une source très importante de données en temps réel. Si vous voulez des données en temps réel, vous devriez travailler avec une source de données push en temps réel (il y en a beaucoup, principalement orientées vers les données financières).

J'ai implémenté un système (dans SQL Server, pas MySQL, mais peut-être vous pouvez faire la même chose) en utilisant des déclencheurs de mise à jour et des procédures stockées natives. Une procédure stockée native est simplement une DLL de code non géré qui implémente une certaine interface et une qui peut être appelée à partir d'un déclencheur SQL.

La séquence des événements est à peu près comme suit:

  1. code managé ouvre un fichier d'accord sur le système de fichiers (permet de l'appeler fichier « regarder ») avec FileSystemWatcher et définit un rappel lorsque le fichier est modifié.
  2. La mise à jour déclenche le déclenchement et appelle la procédure stockée native.
  3. La procédure stockée native "touche" le fichier de surveillance, mettant à jour son champ modifié de données.
  4. FileSystemWatcher déclenche un rappel, après quoi nous savons que les données ont été modifiées, donc nous le recharger à partir de la base de données.
0

Vous ne pouvez pas faire cela d'une manière simple. Cependant, il existe une classe SqlDependency (link) que vous pouvez utiliser mais pas avec mySQL.Si quelqu'un est intéressant, (here) est un autre lien vers la documentation de SQL Server. Quoi qu'il en soit, vous devriez vraiment considérer si cette fonctionnalité est nécessaire en raison de l'impact énorme sur l'efficacité de la DB et le trafic réseau.

Questions connexes