2009-04-26 3 views
3

J'ai une connexion Oracle à une base de données ORACLE 10.2 et je souhaite écouter les modifications apportées à une table. L'utilisateur de la connexion a obtenu le privilège "CHANGE NOTIFICATION".Événement OracleDependency not Firing

L'écoute est initialisé avec la méthode suivante:

private OracleDependency SubscribeToTable(string tableName) 
{ 
    string sql = "select * from " + tableName; 
    var cmd = new OracleCommand(sql, this.connection) { AddRowid = true }; 
    var dep = new OracleDependency(cmd); 
    cmd.Notification.IsNotifiedOnce = false; 
    dep.OnChange += this.dep_OnChange; 
    cmd.ExecuteNonQuery(); 
    return dep; 
} 

Quand j'insérer une ligne dans la table observée et livrez, l'événement est dep_OnChange n'a jamais tiré. Qu'est-ce que je fais mal?

MISE À JOUR:

Après avoir vérifié la liste de dépannage et trouvé que tout était OK, je connecté en tant que DBA Oracle et vérifié les adresses IP qui doit être notifié lorsqu'un changement se produit (SELECT * FROM user_change_notification_regs). Pour une raison quelconque, les adresses IP pointaient vers une carte réseau virtuelle VMWare, bien que la demande de notification ait été initiée à partir de la machine physique et non d'une machine virtuelle. Après avoir désactivé cette carte réseau virtuelle, tout fonctionne comme il se doit.

+0

J'ai un problème similaire avec un programme python. Cela a fonctionné pendant un moment, puis a cessé de fonctionner. Je vais mettre à jour avec une réponse si je trouve des indices. –

Répondre

2

Avez-vous exécuté le dépannage dans le documentation?

+2

Le lien de documentation est maintenant invalide. – Thought

0

En alternative, vous pouvez utiliser le composant oracletabledependency. Vous pouvez le trouver à Tabledependency.codeplex.com

Une fois instancié, vous recevrez des événements pour chaque enregistrement de table modifié.