使用oracle12cchangenotification问题OracleCommandcmd=newOracleCommand("select*fromTestWHERETestFLAG=1orTestFLAGisnotnull",con);当表格发生变化时,无论情况如何,我的.net项目仍然会收到通知。对于第二个问题,我第一次收到任何通知后,不会通知表格上的任何更改。为什么?解决我的问题的任何方法?publicclassMyNotificationSample{staticstringconstr="yourdbINFO";publicstaticboolIsNotified=false;静态OracleDependencydep=null;publicstaticvoidMain(string[]args){//要运行此示例,请确保更改通知权限//已授予scott。OracleConnectioncon=null;尝试{con=newOracleConnection(constr);OracleCommandcmd=newOracleCommand("select*fromTestWHERETestFLAG=1orTestFLAGisnotnull",con);con.Open();//设置监听器监听通知的端口号//requestOracleDependency.Port=1005;//创建一个OracleDependency实例并将其绑定到一个OracleCommand//实例。//当OracleDependency实例绑定到OracleCommand//实例时,将创建一个OracleNotificationRequest并在//OracleCommand的Notification属性中设置。这表示随后//执行命令将注册通知。//经过默认情况下,通知请求使用数据库更改//通知。dep=newOracleDependency(cmd);//添加事件处理程序来处理通知。//当从数据库接收到通知消息时将调用//OnMyNotification方法dep.OnChange+=OnMyNotificaton;//通知注册被创建并且查询结果集//与命令关联可以在有变化时失效。当第一次通知注册发生时,//通知侦听器启动并且侦听器端口号//将为1005。cmd.ExecuteNonQuery();}catch(Exceptione){Console.WriteLine(e.Message);}con.Close();Console.Write("按任意键退出");控制台.ReadLine();//等待通知时循环数据表更改详细信息=arg。细节;Console.WriteLine("{0}中的数据已更改",changeDetails.Rows[0]["ResourceName"]);}}最新更新:让监听器永不过期newOracleDependency(cmd,false,0,true);但是,我的查询仍然不起作用...将其添加到您的代码中cmd.Notification.IsNotifiedOnce=false;您的查询具有此WHERE子句:TestFLAG=1orTestFLAGisnotnull。TestFLAG之间可能缺少空格并且不为空。在这种情况下,表达式的第一部分是不必要的,因为当TestFLAG=1时,它不为空。也许问题在于您的查询涵盖的范围远远超过您的预期。除此之外,Oracle的数据库更改通知功能不保证您只会收到查询实际返回的行的通知。它保证您会收到这些行的通知,但您也可能会收到“误报”,因此通知行实际上与您的查询不匹配。这可能是Oracle文档(强调我的)的一个很好的解释:基于查询的注册有两种模式:保证和尽力而为。在保证模式下,任何数据库更改通知都保证更改查询结果集中包含的内容。但是,如果查询比较复杂,则无法以保证方式注册。在这种情况下使用尽力而为模式。尽力而为模式简化了基于查询的注册表查找。简化而不遗漏任何通知。然而,简化可能会导致误报,因为当原始查询结果不会改变时,更简单版本的查询结果可能会发生变化。对于哪些查询可以使用尽力而为查询进行注册,仍然存在一些限制。在这种情况下,开发人员可以使用基于对象的注册,它可以注册大多数查询类型。基于对象的注册会在查询对象更改时生成通知,即使实际查询结果没有更改也是如此。这也意味着基于对象的注册比基于查询的注册更容易出现误报。开发人员应该了解每个数据库更改通知选项的相对优点和缺点,并选择最适合他们要求的选项。关于第二个问题,正如@user1415516所写,需要设置通知在第一次通知后不注册,所以添加cmd.Notification.IsNotifiedOnce=false;在执行命令之前。以上就是C#学习教程:使用oracle12c更改通知问题分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
