4

OracleDependency の使用に問題があります。

msdn と oracle のドキュメントを読み、いくつかのコードをコピーして試してみました。

ただし、これは機能していません。挿入が完了したときにイベント on_my_event が発生しません。

誰も理由を知っていますか?

私のユーザーは、データベースに対する CHANGE NOTIFICATION 権限を持っています。Oracle サーバーは 11.2.0.3.0 です。

コードは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Oracle.DataAccess.Client;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    string connection_string = "Data Source=My_srv;User Id=My_usr;Password=My_pwd;";
    OracleConnection connection = null;
    OracleDependency dependency = null;
    OracleCommand my_select = null;
    OracleCommand my_insert = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void TB_insert_event(object sender, EventArgs e)
    {
        if (TB_insert.Text == "Name of your insert")
            TB_insert.Clear();
    }

    private void insert(object sender, EventArgs e)
    {
        connection = new OracleConnection(connection_string);
        my_insert = connection.CreateCommand();
        my_insert.CommandText = "INSERT INTO USR_DEV_TRUNK.WPARAM (wpa_codeparam) VALUES ('" + TB_insert.Text + "')";
        connection.Open();
        my_insert.ExecuteNonQuery();
        connection.Close();
    }

    private void Set_dep(object sender, EventArgs e)
    {
        OracleDependency.Port = 3048;
        connection = new OracleConnection(connection_string);
        connection.Open();
        my_select = connection.CreateCommand();
        my_select.CommandText = "SELECT wpa_codeparam FROM USR_DEV_TRUNK.WPARAM";
        dependency = new OracleDependency();
        dependency.AddCommandDependency(my_select);
        my_select.Notification.IsNotifiedOnce = false;
        my_select.ExecuteNonQuery();
        dependency.OnChange += new OnChangeEventHandler(on_my_event);
        TB_dependency.Text = "The dependency is set, do your insert to see if it works";
        connection.Close();
    }

    public void on_my_event(object obj, OracleNotificationEventArgs arg)
    {
        TB_dependency.Text = "Yay ! It worked !";
    }
  }
}

私は2つのボタンを持っています:

依存関係を設定するもの (関数 (クリック時) : Set_dep)

私の挿入を行うもの(機能(クリック時):挿入)

そして、私は2つのテキストボックスを持っています:

私の挿入物を取得するもの (名前: TB_insert)

依存状態を示すもの (名前: TB_dependency)

4

1 に答える 1

0

ポート 3048 のパケットがファイアウォールによってブロックされていないことを確認しましたか?

また、依存関係が設定されたら、USER_CHANGE_NOTIFICATION_REGS / DBA_CHANGE_NOTIFICATION_REGS ビューを照会して確認できますか?

于 2013-09-05T09:17:06.170 に答える