Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2015, 11:48
Angel_Nemo
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Operación no válida dado el estado actual del objeto

Hola gente del Foro,

Tengo un inconveniente realizando al exportarla a un archivo plano.
Ejecuto la consulta de acuerdo al valor que tomo de un dropdownlist.
Como algunos resultados devuelven muchisimos archivos entonces solo escojo los primeros 1000 (de lo contrario el usuario se cansaria de paginar tanto)

Código:
private void ConsultaCajas()
    {
        using (OracleConnection oraCon = new OracleConnection(conn))
        {
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.CommandText = "SELECT * FROM V_DANEC_CAJAS " +
                    "WHERE CAJA_CODIGO = " + "'" + ddlCodCaj.Text + "' " +
                    "AND ROWNUM <= 1000";
                cmd.Connection = oraCon;
                oraCon.Open();

                OracleDataAdapter DACajas = new OracleDataAdapter(cmd);
                DACajas.Fill(dt);

                if (dt.Rows.Count != 0)
                {
                    gvwCajas.DataSource = dt;
                    gvwCajas.DataBind();

                    lblMensaje.Text = dt.Rows.Count.ToString() + " Encontrados";
                    contFilas = dt.Rows.Count;

                    if (contFilas > 1000)
                    {
                        lblMensaje2.Text = "(se muestran 1000 primeros)";
                    }

                    oraCon.Close();
                }

            }
        }
    }
El usuario debe poder exportar los archivos a un archivo plano, y es ahi cuando aprovecho para cargar ahi si los registros completos de la consulta:

Código:
//CONSULTAR TODO: A DIFERENCIA DE CONSULTAR TOP50 CONSULTAMOS TODO PARA EXPORTAR A EXCEL
    private void ArchivoPlanoCajas()
    {
        using (OracleConnection OraCon = new OracleConnection(conn))
        {
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.CommandText = "SELECT * FROM V_DANEC_CAJAS " +
                    "WHERE CAJA_CODIGO = " + "'" + ddlCodCaj.Text + "' ";
                
                //try
                //{
                    OraCon.Open();
                    OracleDataAdapter odap = new OracleDataAdapter(cmd);
                    odap.Fill(dtrpt);
                    lblMensaje.Text = "";
                    lblMensaje.Text = "Exportadas TODAS las cajas correspondientes al codigo";
                    OraCon.Close();

                //}
                //catch (Exception orex)
                //{
                    //lblMensaje.Text = "";
                    //lblMensaje.Text = orex.ToString();
                //}
            }
        }
    }


    protected void generadorExcel()
    {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        foreach (DataColumn column in dtrpt.Columns)
        {
            context.Response.Write(column.ColumnName + ";");
        }
        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in dtrpt.Rows)
        {
            for (int i = 0; i < dtrpt.Columns.Count; i++)
            {
                context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
            }
            context.Response.Write(Environment.NewLine);
        }
        context.Response.ContentType = "text/csv";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + dtrpt + ddlCodCaj.Text + ".csv");
        context.Response.End();
    }
utilizo otro Data TAble, para almacenar ahi la consulta, he hecho esto otras veces y no he tenido problema, pero es la 1ra vez que trabajo con oracle, no se si deba a eso, aunque no lo creo

En fin, cuando trato de exportar la consulta a un archivo plano obtengo el siguiente error:

"Operación no válida dado el estado actual del objeto."
Detalles de la excepción: System.InvalidOperationException: Operación no válida dado el estado actual del objeto.
Y el error se marca en el DataTable correspondiente:
Línea 153: odap.Fill(dtrpt);


Si alguien tiene una pista de lo que pasa, le quedaría muy agradecido.


Saludos Cordiales.