У меня есть соединение Oracle с базой данных ORACLE 10.2 и вы хотите прослушать изменения в таблице. Пользователю соединения была предоставлена привилегия "ИЗМЕНИТЬ УВЕДОМЛЕНИЕ".
Прослушивание выполняется с помощью следующего метода:
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;
}
Когда я вставляю строку в наблюдаемую таблицу и фиксирую, событие dep_OnChange никогда не запускается. Что я делаю неправильно?
UPDATE:
После проверки списка устранения неполадок и поиска все в порядке, я подключился как DBA к Oracle и проверил ip-адреса, которые должны быть уведомлены при изменении (SELECT * FROM user_change_notification_regs). По некоторым причинам IP-адреса указывали на виртуальный сетевой адаптер VMWare, хотя запрос уведомления был инициирован с физической машины, а не с виртуальной машины. После отключения этого виртуального сетевого адаптера все работает так, как должно.
Пропустили ли вы проблему в документации?
В качестве альтернативы вы можете использовать компонент oracletabledependency. Вы можете найти его на Tabledependency.codeplex.com
После создания экземпляра вы получите события для каждой записи таблицы.