2011-05-16 142 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