Ändern Benachrichtigung mit Oracle-Abhängigkeit in C#
Ich versuche, oracle database change notification in c#. Ich fand
dieses tutorial über, wie man diese Benachrichtigungen. Hab ich auch erstellt einfache win form-Anwendung für den Fang von Benachrichtigungen
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");
}
}
Login-string und OracleCommand cmd sind 100% in Ordnung. Ich habe versucht auch das zu ändern-Datenbank programmgesteuert, es verändert Daten in der Datenbank, aber nicht gefeuert OnChange-Ereignis.
Ich ihm auch Benachrichtigungen tu USR user
grant change notification to USR
und job_queue_processes sind größer als null.
Kann ein problem in der Tatsache, dass ich mit Express edition der oracle-Datenbank?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung. Problem war nicht in der edition der Oracle-Datenbank, aber in der version. Version von Oracle server war 11.2.0.2.0 und version der client war 11.2.0.3.0 und dieser kleine Unterschied war, das problem verursacht.
Also für die Zukunft, immer überprüfen Sie die Versionen von client und server, bei der Begegnung ähnliches problem.
Auch Sie verpasste
cmd.ExecuteNonQuery()
im code. Ohne das ausführen des Befehls wird dieser code nicht funktioniert, unabhängig von der version der Datenbank.