示例#1
0
        public void StartReceivingUpdatesFromDb()
        {
            lock (this)
            {
                if (_disposed)
                {
                    return;
                }

                IDataParameter parameter = _dbProviderFactory.CreateParameter();
                parameter.ParameterName = "iPayloadId";
                parameter.Value         = _lastPayloadId;
                parameter.DbType        = DbType.Decimal;
                parameter.Direction     = ParameterDirection.Input;

                OracleParameter resultSetParameter = _dbProviderFactory.CreateParameter() as OracleParameter;
                if (resultSetParameter != null)
                {
                    resultSetParameter.ParameterName = "oRefCur";
                    resultSetParameter.OracleDbType  = OracleDbType.RefCursor;
                    resultSetParameter.Direction     = ParameterDirection.Output;
                }

                _observableDbOperation = _observableDbOperationFactory.ObservableDbOperation(_connectionString,
                                                                                             _selectSql, _useOracleDependency, _traceSource, _dbProviderFactory, parameter, resultSetParameter);
            }

            _observableDbOperation.Queried += () =>
            {
                if (Queried != null)
                {
                    Queried();
                }
            };

            _observableDbOperation.Faulted += ex =>
            {
                if (Faulted != null)
                {
                    Faulted(ex);
                }
            };

            _observableDbOperation.Changed += () =>
            {
                _traceSource.TraceInformation("Starting receive loop again to process updates");
                _observableDbOperation.ExecuteReaderWithUpdates(ProcessRecord);
            };

            _traceSource.TraceVerbose("Executing receive reader, initial payload ID parameter={0}",
                                      _observableDbOperation.Parameters[0].Value);
            _observableDbOperation.ExecuteReaderWithUpdates(ProcessRecord);
            _traceSource.TraceInformation("OracleReceiver.GetLastPayloadId returned");
        }