protected DbCommand BuildStoredProcedureCommand(string query, ParamSet paramSet)
        {
            DbCommand cmd = null;

            switch (DBEngine)
            {
            case DBEngines.MSSqlServer:
                cmd = new SqlCommand();
                break;

            case DBEngines.Oracle:
                cmd = new OracleCommand();
                break;
            }

            cmd.Connection  = DbConnection;
            cmd.Transaction = DbTransaction;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = ResolveStoredProcedurePlaceholders(query);

            if (paramSet != null)
            {
                foreach (ParamSet.ParamInfo pi in paramSet.GetInfos())
                {
                    IDbDataParameter param = cmd.CreateParameter();
                    param.ParameterName = pi.Name;
                    if (pi.OracleDbType.HasValue && DBEngine == DBEngines.Oracle)
                    {
                        OracleParameter oracleParam = param as OracleParameter;
                        if (oracleParam != null)
                        {
                            oracleParam.OracleDbType = pi.OracleDbType.Value;
                        }
                    }
                    else
                    {
                        param.DbType = pi.DbType;
                    }
                    param.Value     = pi.Value;
                    param.Direction = pi.Direction;
                    cmd.Parameters.Add(param);
                }
            }

            return(cmd);
        }