首页 > 解决方案 > OracleDependency 不会触发事件

问题描述

我想在表 x 的表更改上创建 Oracle DB 的侦听器,其值根据表 y 的插入/更新而更改,因此我编写了以下代码:

public static OracleDependency dependency;
    private static OracleConnection con;
    private static OracleCommand cmd;

    static void Main(string[] args)
    {
        con = new OracleConnection(ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["DBString"]].ConnectionString);
        cmd = new OracleCommand(
                                      "select * from X ", con ) ;

        con.Open();
        //OracleDependency.Port = 23;
        //OracleDependency.Address = "11.10.11.1";

        cmd.AddRowid = true;

        dependency = new OracleDependency(cmd);
        dependency.OnChange += Dependency_OnChange;

        bool IsNotified = false;

        dependency.QueryBasedNotification = true;

        cmd.Notification.IsNotifiedOnce = false;

        cmd.ExecuteNonQuery();
        //con.Close();

        Console.WriteLine("Listeneing to DB....");

        // Loop while waiting for notification
        while (IsNotified == false)
        {
            Thread.Sleep(100);
        }
     }

    private static void Dependency_OnChange(object sender, OracleNotificationEventArgs args)
    {
        DataTable dt = args.Details;
        string msg = string.Empty;
        msg = "THe following DB objects were changed";
        foreach (string resource in args.ResourceNames)
            msg += resource;

        msg += "\n\n Details";
        for (int i = 1; i < dt.Rows.Count; i++)
        {
            msg += "Resource Name: " + dt.Rows[i].ItemArray[0];
            string type = Enum.GetName(typeof(OracleNotificationInfo), dt.Rows[i].ItemArray[1]);
            msg += "\nchange type: " + type;
            Console.WriteLine(msg);
        }
    }

当我在 user_change_notification_regs 中选择条目时,我看到添加了条目,但是一旦提交了任何事务,条目就会被删除并且不会触发通知事件,代码有什么问题吗?

标签: .netoraclenotifications

解决方案


推荐阅读