在C#中使用Oracle依赖项更改通知

Lad*_*avM 3 c# oracle11g

我正在尝试在C#中获取Oracle数据库更改通知。我找到了 有关如何获取这些通知的教程。我还创建了用于捕获通知的简单胜利表格应用程序

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        SetUpNotification();
    }

    private void SetUpNotification()
    {
        var login = "DATA SOURCE=XE;PERSIST SECURITY INFO=True;USER ID=USR;PASSWORD=PWD";

        OracleConnection conn = null;
        OracleDependency dep = null;

        try
        {
            conn = new OracleConnection(login);

            var cmd = new OracleCommand("select * from customer_details", conn);

            conn.Open();

            cmd.AddRowid = true;
            dep = new OracleDependency(cmd);
            cmd.Notification.IsNotifiedOnce = false;

            dep.OnChange += new OnChangeEventHandler(dep_OnChange);
        }
        catch(Exception e)
        {
            MessageBox.Show(e.Message, e.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    void dep_OnChange(object sender, OracleNotificationEventArgs eventArgs)
    {
        MessageBox.Show(eventArgs.Details.ToString(), "Database changed");
    }
}
Run Code Online (Sandbox Code Playgroud)

登录字符串和OracleCommand cmd的罚款为100%。我还尝试以编程方式更改数据库,它更改了数据库中的数据,但没有触发OnChange事件。

我还向USR用户授予了通知

grant change notification to USR
Run Code Online (Sandbox Code Playgroud)

和job_queue_processes大于零。

我正在使用Oracle数据库的Express版,这可能是一个问题吗?

Lad*_*avM 5

我找到了解决方案。问题不是在Oracle数据库的版本中,而是在版本中。Oracle服务器的版本为11.2.0.2.0,客户端的版本为11.2.0.3.0,此微小差异引起了问题。

因此,将来,遇到类似问题时,请始终检查客户端和服务器的版本。