Уважаемые все,
Я пытаюсь использовать OracleDependecy для уведомления об обновлении.
Внутри системной таблицы USER_CHANGE_NOTIFICATION_REGS я вижу зарегистрированное действие (с моим IpAddress и портом)
Я использую пакет Nuget Oracle.ManagedDataAccess (v. 4.122.18.3) внутри проекта консольного приложения (стандарт .Net)
Моя версия Oracle такова: Oracle Database 11g Enterprise Edition, выпуск 11.2.0.3.0 - 64-разрядная рабочая версия PL / SQL, выпуск 11.2.0.3.0 - производственная
Однако это не работает, событие dependency_OnChange не срабатывает, когда обновление сделано.Кто-нибудь знает почему?Где я могу найти пример работающего проекта?
Заранее спасибо
Здесь ниже вы можете найти код:
using (OracleConnection oraConnection = new OracleConnection(oraConnectionString))
{
try
{
// Open the connection
oraConnection.Open();
// Create the Select command retrieving single row from table.
OracleCommand selectCommand = new OracleCommand(oraQuery, oraConnection);
// Create an OracleDependency object and set it to track the result set returned by selectCommand.
oraDependency = new OracleDependency(selectCommand);
//Port
OracleDependency.Port = 3048;
// Setting object-based change notification registration
oraDependency.QueryBasedNotification = false;
// When the IsNotifiedOnce property is true, only the first change
// of the traced result set will generate a notification.
// Otherwise, notifications will be sent on each change
// during the selectCommand.Notification.Timeout period.
selectCommand.Notification.IsNotifiedOnce = false;
// Set the event handler to the OnChange event.
oraDependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
// When the select command is executed at the first time, a notification
// on changes of the corresponding result set is registered on the server.
//selectCommand.CommandTimeout = 5;
OracleDataReader reader = selectCommand.ExecuteReader(CommandBehavior.Default);
// Pause the current thread to process the event.
Console.WriteLine("Ok");
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("Exception encountered: {0}", e.Message);
}
// Always try to both remove the notification registration
// oraConnection.Close() is autimatically called by .Dispose at the end of our 'using' statement
finally
{
try
{
oraDependency.RemoveRegistration(oraConnection);
}
catch (Exception e)
{
Console.WriteLine("Exception encountered: {0}", e.Message);
}
}
}