void CreateIndex(ISagaData sagaData, OracleDbConnection connection,
                         IEnumerable <KeyValuePair <string, string> > propertiesToIndex)
        {
            var sagaTypeName = GetSagaTypeName(sagaData.GetType());
            var parameters   = propertiesToIndex
                               .Select((p, i) => new
            {
                SagaType      = sagaTypeName,
                SagaId        = sagaData.Id.ToByteArray(),
                PropertyName  = p.Key,
                PropertyValue = p.Value ?? "",
            })
                               .ToList();

            // lastly, generate new index
            using (var command = connection.CreateCommand())
            {
                // generate batch insert with SQL for each entry in the index
                command.CommandText =
                    $@"INSERT INTO {_indexTable} (saga_type, key, value, saga_id) VALUES (:saga_type, :key, :value, :saga_id)";
                command.BindByName     = true;
                command.ArrayBindCount = parameters.Count;
                command.Parameters.Add(new OracleParameter("saga_type", OracleDbType.NVarchar2, parameters.Select(x => x.SagaType).ToArray(), ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("key", OracleDbType.NVarchar2, parameters.Select(x => x.PropertyName).ToArray(), ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("value", OracleDbType.NVarchar2, parameters.Select(x => x.PropertyValue).ToArray(), ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("saga_id", OracleDbType.Raw, parameters.Select(x => x.SagaId).ToArray(), ParameterDirection.Input));
                command.ExecuteNonQuery();
            }
        }
Exemple #2
0
        public ActionResult <string> Data([FromBody] string data)
        {
            bool res;

            using (var con = new OracleDbConnection())
            {
                res = con.isConnection();
            }
            return(res ? "1" : "0");
        }
 void UpdateLastReadTime(string id, OracleDbConnection connection)
 {
     using (var command = connection.CreateCommand())
     {
         command.CommandText = $"UPDATE {_table} SET lastReadTime = :now WHERE id = :id";
         command.BindByName  = true;
         command.Parameters.Add("now", _rebusTime.Now.ToOracleTimeStamp());
         command.Parameters.Add("id", id);
         command.ExecuteNonQuery();
     }
 }
Exemple #4
0
        static void ExecuteCommands(OracleDbConnection connection, string sqlCommands)
        {
            foreach (var sqlCommand in sqlCommands.Split(new[] { "----" }, StringSplitOptions.RemoveEmptyEntries))
            {
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = sqlCommand;

                    Execute(command);
                }
            }
        }
        /// <summary>
        /// Opens the data stored under the given ID for reading
        /// </summary>
        public Task <Stream> Read(string id)
        {
            try
            {
                // update last read time quickly
                UpdateLastReadTime(id);

                OracleDbConnection connection = null;
                OracleCommand      command    = null;
                OracleDataReader   reader     = null;

                try
                {
                    connection = _connectionHelper.GetConnection();

                    command             = connection.CreateCommand();
                    command.CommandText = $"SELECT data FROM {_table} WHERE id = :id";
                    command.Parameters.Add("id", id);
                    command.InitialLOBFetchSize = 4000;

                    reader = command.ExecuteReader(CommandBehavior.SingleRow);

                    if (!reader.Read())
                    {
                        throw new ArgumentException($"DataBus row with ID {id} not found");
                    }

                    var blob = reader.GetOracleBlob(0);

                    return(Task.FromResult <Stream>(new StreamWrapper(blob, /* dispose with stream: */ reader, command, connection)));
                }
                catch
                {
                    // if something of the above fails, we did not pass ownership to someone who can dispose it... therefore:
                    reader?.Dispose();
                    command?.Dispose();
                    connection?.Dispose();
                    throw;
                }
            }
            catch (Exception exception)
            {
                // Wrap in AggregateException to comply with Rebus contract. Tests do look for this specific exception type.
                throw new AggregateException(exception);
            }
        }
 public OracleApplicationRepository(OracleDbConnection dbConnection)
 {
     _dbConnection = dbConnection;
 }
 public OracleUnitOfWork(string connectionString)
 {
     _dbConnection = new OracleDbConnection(connectionString);
 }
Exemple #8
0
 public ConnectionWrapper(OracleDbConnection connection)
 {
     Connection = connection;
     Semaphore  = new SemaphoreSlim(1, 1);
 }
Exemple #9
0
 /// <summary>
 /// 使用链接类初始化oracle的链接
 /// </summary>
 /// <param name="Connection"></param>
 public OracleDbHelper(OracleDbConnection Connection)
     : base(Connection)
 {
 }