gpt4 book ai didi

c# - C# 中 Oracle 依赖项的更改通知

转载 作者:行者123 更新时间:2023-11-30 15:03:58 26 4
gpt4 key购买 nike

我正在尝试在 C# 中获取 Oracle 数据库更改通知。我发现 this tutorial关于如何获得这些通知。我还创建了用于捕获通知的简单 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 cmd 100% 正常。我还尝试以编程方式更改数据库,它更改了数据库中的数据,但没有触发 OnChange 事件。

我还向 USR 用户授予了通知

grant change notification to USR

并且 job_queue_processes 大于零。

事实上,我使用的是 oracle 数据库的 Express 版,这可能是一个问题吗?

最佳答案

我找到了解决方案。问题不在Oracle数据库的版本上,而在版本上。 Oracle 服务器的版本是 11.2.0.2.0,客户端的版本是 11.2.0.3.0,正是这个小差异导致了问题。

所以以后遇到类似的问题,一定要检查客户端和服务器的版本。

关于c# - C# 中 Oracle 依赖项的更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10932968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com