locked
No funciona el importar datos de Excel en Servidor RRS feed

  • Pregunta

  • Ocupo importar los datos de excel a datatable, el problema es que en mi pc donde programo la pagina funciona perfectamente pero cuando la pongo en el IIS de Windows Server 2008 R2 ya no funciona, me detecta 0 filas con el mismo archivo que pruebo en mi pc.

    Este es el codigo que uso para extraer los datos del Excel:

    Hice la prueba de quitar el excelSheets y puse el nombre de la pagina manual he igual no funciona... Tambien probe con otro string connection y no hace diferencia.


        public DataTable Importar()
        {
            DataTable dt = new DataTable(), dtShets = new DataTable();
            try
            {
                if (fuArchivo.PostedFile.ContentLength > 0)
                {
                    if (fuArchivo.FileName.Equals(string.Empty) == false)
                    {
                        String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fullPath + ";" + "Extended Properties=Excel 8.0;";
                        //String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullPath + ";Extended Properties='Excel 12.0 Xml;HDR=Yes'";
                        OleDbConnection conn = new OleDbConnection(sConnectionString);
                        conn.Open();

                        dtShets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                        if (dtShets == null)
                        {
                            return null;
                        }

                        String[] excelSheets = new String[dtShets.Rows.Count];
                        int i = 0;

                        // Add the sheet name to the string array.
                        foreach (DataRow row in dtShets.Rows)
                        {
                            excelSheets[i] = row["TABLE_NAME"].ToString();
                            i++;
                        }

                        OleDbDataAdapter MyDataAdapter = new OleDbDataAdapter("Select * from [" + excelSheets[0] + "]", conn);
                        MyDataAdapter.Fill(dt, "XLData");
                        conn.Close();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "invocarfuncion", @"alert('El nombre del archvio esta vacio');", true);
                    }
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "invocarfuncion", @"alert('Error al intentar importar [Sheet1$]\\n\\n" + ex.ToString() + "');", true);
            }
            return dt;
        }

    martes, 4 de julio de 2017 19:22

Respuestas

  • Revisa el valor de la variable fullPath que pones en el DataSource. Cerciórate de que apunta a una carpeta que sea accesible para el proceso web. Recuerda que, de forma predeterminada y mientras no cambies los permisos, una aplicación web en un servidor solo puede acceder a las carpetas que están por debajo de la raíz de la aplicación, pero no puede salirse a otras carpetas del disco.

    Otra cosa a comprobar es que el proveedor ACE que tienes instalado sea de los mismos bits que la aplicación, es decir, si la tienes ejecutándose en 64 bits el proveedor tiene que ser de 64 bits, no funcionará con el de 32.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 5 de julio de 2017 15:42
    • Marcado como respuesta luisz15 miércoles, 5 de julio de 2017 17:32
    martes, 4 de julio de 2017 21:25

Todas las respuestas

  • Revisa el valor de la variable fullPath que pones en el DataSource. Cerciórate de que apunta a una carpeta que sea accesible para el proceso web. Recuerda que, de forma predeterminada y mientras no cambies los permisos, una aplicación web en un servidor solo puede acceder a las carpetas que están por debajo de la raíz de la aplicación, pero no puede salirse a otras carpetas del disco.

    Otra cosa a comprobar es que el proveedor ACE que tienes instalado sea de los mismos bits que la aplicación, es decir, si la tienes ejecutándose en 64 bits el proveedor tiene que ser de 64 bits, no funcionará con el de 32.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 5 de julio de 2017 15:42
    • Marcado como respuesta luisz15 miércoles, 5 de julio de 2017 17:32
    martes, 4 de julio de 2017 21:25
  • No es eso, el fullPath si apunta a la carpeta, tambien le doy permisos y si puedo guardar el archivo y borrarlo y los dos proveedores ACE son de 64 bits, el problema es que no detecta datos en el archivo y el datatable que regresa no esta nulo.
    miércoles, 5 de julio de 2017 15:59
  • Ya quedo solucionado, como me pasaron el codigo pense que solo era eso pero se tiene que instalar el Microsoft Access Database Engine 2016 Redistributable, Muchas gracias!!
    miércoles, 5 de julio de 2017 16:29