C# で Oracle データベースの変更通知を取得しようとしています。これらの通知を取得する方法に関するこのチュートリアルを見つけまし た。また、通知をキャッチするための単純な win フォーム アプリケーションも作成しました。
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");
}
}
ログイン文字列と OracleCommand コマンドは 100% 問題ありません。プログラムでデータベースを変更しようとしましたが、データベースのデータが変更されましたが、OnChange イベントは発生しませんでした。
USRユーザーにも通知を許可しました
grant change notification to USR
job_queue_processes が 0 より大きい。
実際、 Oracle データベースのExpress エディションを使用していることが問題になる可能性はありますか?