C # OracleDependency OnChange запускается несколько раз - PullRequest
1 голос
/ 16 мая 2011

Насколько я понимаю, OracleDependency можно привязать к мониторингу запроса (а не только к таблице). Я делаю 2 командных объекта и 2 объекта зависимостей, но у обоих запросов разные предложения where, поэтому они должны смотреть на 2 разных подмножества этой таблицы.

Я назначаю оба этих объекта зависимости одному и тому же обратному вызову. Я ожидаю, что когда я изменю что-то в таблице, один из этих объектов зависимости будет наблюдать, что событие OnChange сработает для этого. Затем я смог бы сделать следующее в событии OnChange, чтобы получить запрос, вызвавший изменение:

OracleDependency OraDep = (OracleDependency)sender; string sql = (string)OraDep.RegisteredResources[0];

Итак, я настроил 2 запроса к одной и той же таблице с другим значением условия where. Затем я захожу в БД и меняю один из них, но, к моему удивлению, OnChange даже запускается дважды, и приведенный выше код для получения запроса показывает оба запроса.

Нет ли способа получить зависимость для конкретного запроса, а не для всей таблицы? Я думал, что где-то читал, что вы настроили его для конкретного запроса, где предложение и все.

1 Ответ

2 голосов
/ 16 мая 2011

Уведомление об изменении Oracle отслеживает объекты, а не запросы.При любом изменении в таблице добавляется новая запись, обновляется или удаляется, добавляется новый столбец, переименовывается / удаляется.Вот почему вы видите уведомления 2 раза.

Одним из способов является вызов хранимых процедур вместо запросов.Принимаю только 1 уведомление.Событие уведомления e.info сообщает вам, что это за операция вставки / обновления / удаления.Таким образом, вы можете написать условие if, которое отвечает только на уведомления о вставке, и на основании этого вы можете вызвать соответствующий sp или запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...