public void creaTabla()
        {
            DBConnection db = new DBConnection(CadenaDeConexion);
            db.connect();

            StringBuilder cmd = new StringBuilder();
            cmd.Append(" IF OBJECT_ID('");
            cmd.Append(Esquema);
            cmd.Append(".dbo.cube', 'U') IS NOT NULL");
            cmd.Append(" DROP TABLE ");
            cmd.Append(Esquema);
            cmd.Append(".dbo.cube");
            db.ejecutaComando(cmd.ToString());

            cmd = new StringBuilder();

            cmd.Append("Create table ");
            cmd.Append(Esquema);
            cmd.Append(".dbo.cube(");
            for (int i = 0; i < campos.Count; i++)
            {
                if (i != 0)
                {
                    cmd.Append(",");
                }
                cmd.Append(campos[i]);
                cmd.Append(" ");
                cmd.Append("Text");//tipos[i]);
            }
            if (campos.Count > 0)
            {
                cmd.Append(",");
            }
            if (tipoF == tipoFuncion.cont)
            {
                cmd.Append("Total");
            }
            else
            {
                cmd.Append(columnaResumen);
            }

            cmd.Append(" ");
            cmd.Append("int");
            cmd.Append(")");
            String debug = cmd.ToString();
            db.ejecutaComando(cmd.ToString());
        }
        private void generaQuery()
        {
            // agrupar por los que tienen 0, los
            DBConnection db = new DBConnection(CadenaDeConexion);
            db.connect();

            StringBuilder cmd = new StringBuilder();
            cmd.Append("IF OBJECT_ID('dbo.#temp', 'U') IS NOT NULL ");
            cmd.Append(" DROP TABLE dbo.#temp ");
            cmd.Append(" create table dbo.#temp ( ");

            for(int i=0; i<todoCampo.Count;i++){
                if(i!= 0){
                    cmd.Append(",");
                }
                cmd.Append(todoCampo[i]);
                cmd.Append(" ");
                cmd.Append(todoTipo[i]);
            }
            cmd.Append(" ) ");
            cmd.Append(" Insert into dbo.#temp ");
            cmd.Append(query);

            /* generar tabla estilo lo siguiente
             *
             IF OBJECT_ID('dbo.#temp', 'U') IS NOT NULL  DROP TABLE dbo.#temp
             create table dbo.#temp ( usuario int,problema int,puntos int,hora bigint,primero int )
             Insert into dbo.#temp SELECT *  FROM [Karelotitlan].[dbo].[UsuarioProblema]

             select CAST( CAST(usuario AS nvarchar) as text), CAST( CAST(problema AS nvarchar) AS text), sum(primero) from
            dbo.#temp
            group by usuario,problema

             Insert into Karelotitlan.dbo.cube
             select CAST( CAST(usuario AS nvarchar) as text), CAST( CAST(problema AS nvarchar) AS text), sum(primero) from
            dbo.#temp
            group by usuario,problema

             drop table dbo.#temp
             *
             */

            cmd.Append(" Insert into ");
            cmd.Append(Esquema);
            cmd.Append(".dbo.cube ");

            cmd.Append("select ");

            // lista de parametreos si tiene 0 hacer CAST si no poner 0
            for (int i = 0; i < campos.Count; i++)
            {
                if (i != 0)
                {
                    cmd.Append(",");
                }
                if (elegidos[i] == 0)
                {
                    //cmd.Append(" CAST ( CAST ( ");
                    cmd.Append(campos[i]);
                    //cmd.Append(" AS nvarchar) AS text) ");
                }
                else
                {
                    cmd.Append(" '(ALL)' ");
                }
            }
            if (campos.Count > 0)
            {
                cmd.Append(",");
            }
            switch (this.tipoF)
            {
                case tipoFuncion.cont:
                    cmd.Append(" count(*) ");
                    break;
                case tipoFuncion.avg:
                    cmd.Append(" AVG(");
                    cmd.Append(columnaResumen);
                    cmd.Append(") ");
                    break;
                case tipoFuncion.max:
                    cmd.Append(" MAX(");
                    cmd.Append(columnaResumen);
                    cmd.Append(") ");
                    break;
                case tipoFuncion.min:
                    cmd.Append(" MIN(");
                    cmd.Append(columnaResumen);
                    cmd.Append(") ");
                    break;
                case tipoFuncion.suma:
                    cmd.Append(" SUM(");
                    cmd.Append(columnaResumen);
                    cmd.Append(") ");
                    break;
            }
            cmd.Append(" from dbo.#temp ");

            // lista de grupos

            int agrupados = 0;
            for (int i = 0; i < campos.Count; i++)
            {
                if (elegidos[i] == 0)
                {
                    if (agrupados > 0)
                    {
                        cmd.Append(",");
                    }
                    else {
                        cmd.Append(" group by ");
                    }
                    cmd.Append(campos[i]);
                    agrupados++;
                }
            }

            cmd.Append(" drop table dbo.#temp ");

            String debug = cmd.ToString();
            db.ejecutaComando(cmd.ToString());
        }