Example #1
0
        public int StartDBListening(string query, OnChangeEventHandler func)
        {
            int           result = -1;
            OracleCommand cmd    = null;

            try
            {
                if (ConnectionOpen())
                {
                    cmd          = new OracleCommand(query, _Connection);
                    cmd.AddRowid = true;

                    //OracleDependency dep = new OracleDependency(cmd);
                    dep.AddCommandDependency(cmd);

                    cmd.Notification.IsNotifiedOnce = false;

                    bool buldu = false;
                    foreach (var item in dep.RegisteredResources)
                    {
                        if (item.ToString() == query)
                        {
                            buldu = true;
                        }
                    }



                    if (buldu == false)
                    {
                        dep.OnChange += new OnChangeEventHandler(func);
                    }

                    cmd.ExecuteNonQuery();
                }
            }
            catch (OracleException oex)
            {
            }
            catch (Exception ex)
            {
                LogIslemleri.LogYaz(ex.Message);
                result = -1;
            }
            finally
            {
                if (cmd != null)
                {
                    cmd.Dispose();
                }
                CloseConnection();
            }

            return(result);
        }
        public Task StartListener() => Task.Run(() =>
        {
            var dependency = new OracleDependency
            {
                QueryBasedNotification = false
            };
            dependency.OnChange += this.OnNotification;

            var conn = this.CreateConnection();
            var cmd  = conn.CreateCommand();
            dependency.AddCommandDependency(cmd);

            cmd.CommandText = "SELECT * FROM CHATS";
            cmd.AddRowid    = true;
            cmd.Notification.IsNotifiedOnce = false;
            cmd.ExecuteNonQuery();
        });
        /// <summary>Инициализирует процесс отслеживания изменений в БД</summary>
        private void InitNotifier()
        {
            NotifierConnection = new OracleConnection(ConnectionString);
              NotifierConnection.AutoCommit = false;
              NotifierConnection.Open(); // открываем постоянное соединение с БД

              // подписываемся на получение информации об обновлениях таблиц
              Notifier = new OracleDependency();
              Notifier.QueryBasedNotification = false;
              Notifier.OnChange += Dependency_OnChange;

              StringBuilder SQLText = new StringBuilder();
              for (int i = 0; i < SharedDataInfo.Tables.Length; i++)
              {
            SQLText.AppendFormat("select 1 from {0} where 1=0", SharedDataInfo.Tables[i]);
            if (i != SharedDataInfo.Tables.Length - 1)
              SQLText.Append(" union all ");
              }
              NotifierCommand = NotifierConnection.CreateCommand(SQLText.ToString());
              Notifier.AddCommandDependency(NotifierCommand);
              ConfigureCommand(NotifierCommand);
              NotifierCommand.ExecuteReader();

              NotifierCheckThread = new Thread(CheckNotifier);
              NotifierCheckThread.IsBackground = true;
              NotifierCheckThread.Start();
              Log.Message("Поток контроля нотификатора запущен. ThreadID: {0}", NotifierCheckThread.ManagedThreadId);
        }