public static DataTable BasicQuery(QueryMode mode, string tableName, Param uniqueId = null, QueryBuilder custom = null, params Param[] @params)
        {
            DataTable    dt  = new DataTable();
            SQLManager   sql = new SQLManager();
            QueryBuilder qb  = new QueryBuilder();

            custom = custom ?? new QueryBuilder();
            switch (mode)
            {
            case QueryMode.SELECT_ALL:
                if (@params.Length > 0)
                {
                    foreach (Param p in @params)
                    {
                        sql.AddParam(p.name, p.value);
                    }
                }
                dt = sql.ExecQuery(qb.SelectAll(tableName).Custom(custom.ToString()).ToString());
                break;

            case QueryMode.SELECT_ONE:
                if (uniqueId == null)
                {
                    break;
                }
                dt = sql.ExecQuery(qb.SelectAll(tableName).Where(uniqueId.name).EqualsTo(uniqueId.value).Custom(custom.ToString()).ToString());
                break;

            case QueryMode.CREATE:
                if (@params.Length == 0)
                {
                    break;
                }
                foreach (Param p in @params)
                {
                    sql.AddParam(p.name, p.value);
                }

                sql.ExecQuery(qb.InsertInto(tableName, @params).Custom(custom.ToString()).ToString());
                break;

            case QueryMode.UPDATE:
                if (@params.Length == 0)
                {
                    break;
                }
                if (uniqueId == null)
                {
                    break;
                }

                foreach (Param p in @params)
                {
                    sql.AddParam(p.name, p.value);
                }
                sql.ExecQuery(qb.Update(tableName, @params).Where(uniqueId.name).EqualsTo(uniqueId.value).Custom(custom.ToString()).ToString());
                break;

            case QueryMode.DELETE:
                if (uniqueId == null)
                {
                    break;
                }
                sql.ExecQuery(qb.Delete(tableName).Where(uniqueId.name).EqualsTo(uniqueId.value).Custom(custom.ToString()).ToString());
                break;
            }
            return(dt);
        }