2011-05-16 140 views
1

我的理解是OracleDependency可以綁定到監視查詢(而不僅僅是一個表)。我做了2個命令對象和2個依賴項對象,但是這兩個查詢都有不同的where子句,所以他們應該查看這個表的2個不同的子集。C#OracleDependency OnChange多次觸發

我將這兩個依賴項對象分配給同一個回調。我的期望是,當我在表格中更改某些依賴項對象正在觀察的OnChange事件時會觸發該事件。然後,我將能夠做到以下幾點的OnChange事件得到觸發德更改查詢:

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

所以我設置2個查詢相同的表有不同的where子句值。然後我進入數據庫並更改其中一個,但令我驚訝的是OnChange甚至激發了兩次,上面的代碼使查詢顯示了兩個查詢。

有沒有辦法具有依賴關係爲特定的查詢,而不是整個表?我以爲我讀了一個地方,你設置了一個特定的查詢,where子句和所有。

回答

2

Oracle變更通知監視對象而不是查詢。對錶中新增記錄的任何更改插入,更新或刪除,添加新列,重新命名/刪除。這就是爲什麼你看到通知2次。

一種方法是調用存儲過程而不是查詢。只接受1個通知。通知事件e.info告訴你它是插入/更新/刪除的操作。因此,您可以編寫一個if條件來僅響應插入通知,並根據該條件調用適當的sp或查詢。

希望這會有所幫助。

+0

我想我有一個問題,然後。在這個變化事件中,我需要知道發生了什麼變化。似乎沒有任何東西可以讓我看到這些信息。這看起來很奇怪,因爲我看過的例子在cmd上有一個where子句,但是我可以看到似乎並不是這種情況,但是這仍然讓我需要知道從我的C#應用​​程序中更改了哪些內容。 – user441521 2011-05-16 19:55:14

+0

讓我澄清一下「什麼改變」​​的含義。我的意思是改變的記錄(當msg類型更新時),而不僅僅是哪個表發生了變化(因爲我知道,自從我設置cmd後)。 – user441521 2011-05-16 19:56:23

+0

@ user441521由於您只對更新感興趣,在事件處理函數中,你可以有if條件if(e.info.ToString()==「Update」){Process}否則忽略。 – 2011-05-16 20:22:48