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"); }