J'écris une application de console C++ qui doit répondre à un changement dans un champ spécifique d'une table de base de données. Bien que je puisse continuer à envoyer une requête pour vérifier périodiquement le champ, j'aimerais éviter cela car plusieurs instances de cette application peuvent être en cours d'exécution. J'ai entendu parler de la fonctionnalité de notification de requête de SQL Server 2005 mais il semble que la fonctionnalité ne serait pas disponible pour mon paramètre (SQL Server 2000). Dans ce cas, quel serait le meilleur moyen d'obtenir cette fonctionnalité?Quel serait le meilleur moyen de notifier une application (C++ ou Java) lors d'une modification de base de données?
Répondre
Je pense que vous devriez utiliser des déclencheurs pour cela.
Lorsque le champ de table est modifié, le déclencheur est déclenché et informe l'autre application à l'aide de n'importe quel mécanisme IPC ou écrit les informations nécessaires dans les fichiers de registre ou temporaires.
Je pense que les services de notification elle-même peut être exécuté sur SQL Server 2000.
Jetez un oeil à ces articles:
Hope this helps.
Voici comment je le ferais.
Vous avez votre application de console qui est responsable de vérifier quand la valeur d'une colonne spécifique d'une table change n'importe où dans cette colonne (mettre à jour, supprime, insère, peu importe).
Étape 1 - ne pointe pas que l'application de la console au DB, créez un MSMQ et le faire paraître il
Étape 2 - créer une deuxième application de la console dont la seule tâche est est d'écrire une valeur à la ci-dessus MSMQ
étape 3 - Créer un déclencheur sur la table en question pour exécuter l'application de la console à partir de l'étape 2.
Vous ne pouvez interroger des changements périodiquement. Il n'y a absolument aucun moyen d'obtenir des notifications de SQL Server 2000. Toutes les affirmations contraires sont des chimères.
Les déclencheurs qui effectuent une sorte de notification externe, via une automatisation OLE (sp_oa methods), via des procédures étendues, via xp_cmdshell ou quelque chose comme ça ne vont pas fonctionner. Il y a d'abord le problème des performances: la dernière chose que vous voulez que votre base de données fasse est de bloquer les déclencheurs en attente de réponse des processus externes. Deuxièmement, il y a ce petit détail d'exactitude habituellement ignoré dans un environnement transactionnel: toute notification envoyée pendant un déclencheur devrait être «non envoyée» si la transaction englobante est annulée. La seule façon d'y parvenir est de s'inscrire dans une transaction distribuée avec le mécanisme de notification (MSMQ par exemple) et cela signifie une baisse du débit de centaines/milliers par seconde à un seul chiffre.
N'y allez pas. Effectuez une mise à niveau vers SQL 2005 et utilisez QN, qui est le seul mécanisme de notification de modification active. Ou se contenter d'un sondage périodique des derniers changements.
Chaque instance du mot * pull * doit être * poll *. – wallyk
Vous pouvez éditer et corriger les fautes de frappe et la grammaire wally, ça ne me dérange pas –
"toute notification envoyée lors d'un déclencheur devrait être" non envoyé "si la transaction englobante est annulée". Pas nécessairement vrai avec la bonne sémantique: un message disant "quelque chose a peut-être changé, vous devriez interroger le DB maintenant" ne doit pas être annulé en cas d'échec. Mais si elle est envoyée avant que la transaction ne soit validée, j'imagine que vous auriez un problème insoluble différent, que vous pourriez agir trop tôt. –
- 1. Quel serait le meilleur moyen de conclure ce pointeur vide?
- 2. Quel serait le meilleur moyen de valider XML?
- 3. Quel est le meilleur moyen de conserver les données dans une application Java Desktop?
- 4. Quel serait le meilleur moyen de fournir une petite sélection d'image dans une application iPhone?
- 5. Quel serait le meilleur moyen d'envelopper une énumération
- 6. En C#, quel est le meilleur moyen de déterminer si une base de données est opérationnelle?
- 7. Quel serait le meilleur moyen de faire cette mise en page (css ou tables)?
- 8. Quel serait le meilleur moyen d'analyser ce fichier?
- 9. Quel est le meilleur moyen d'importer des données autonomes dans une base de données?
- 10. Quel serait le meilleur moyen de sauvegarder et de restaurer les dumps mysql avec php?
- 11. Quel est le meilleur moyen d'ajouter des utilisateurs à plusieurs groupes dans une base de données?
- 12. Quel format audio serait le meilleur?
- 13. Quel est le meilleur moyen de stocker des données de modèle dans une application jQuery?
- 14. Quel est le meilleur moyen de copier une base de données?
- 15. Quel est le meilleur moyen de créer une base de données à l'intérieur d'un contrôle personnalisé
- 16. Quel est le meilleur moyen de documenter une base de données mysql?
- 17. Quel est le meilleur moyen de transférer des données avec une application distante sur Internet?
- 18. Quel est le meilleur moyen d'empaqueter une application Java avec beaucoup de dépendances?
- 19. Quel est le meilleur moyen (le plus simple) de transférer des données en C/C++?
- 20. Quel est le meilleur moyen de sauvegarder les paramètres utilisateur dans une application java?
- 21. Le meilleur moyen de version une application rails?
- 22. Quel est le meilleur moyen de lier les données tabulaires
- 23. Quel est le meilleur moyen de concevoir ce scénario de base de données?
- 24. Quel est le meilleur moyen d'obtenir des données de PHP vers une application iOS?
- 25. Quel serait le moyen le plus rapide de créer une chaîne de n caractères en C
- 26. Quel serait le meilleur Alternative à J2ME?
- 27. Quel est le meilleur moyen de communiquer avec la base de données dans Android et pourquoi?
- 28. Quel serait le meilleur moyen d'obtenir à distance le numéro de version Wordpress d'un site Web?
- 29. Notifier les changements de propriété pour les données de base?
- 30. Quel est le meilleur moyen de faire throbber en C#?
Pourriez-vous être plus précis? Comment puis-je utiliser des déclencheurs pour notifier une application? Merci. –