Leer archivos Excel en un servidor de 64 bits, parte II
admin | 4 Septiembre 2008Problemas planteados:
- A traves de una aplicación web el usuario adjunta un archivo Excel. Leer el contenido de dicho archivo y grabarlo en un conjunto de tablas dentro de una base de datos.
- El servidor web que aloja la aplica usa el sistema Windows Server 2003 Release 2, con 64 bits. Esto impide que funcione correctamente el proveedor OLE DB, pues no existe una versión de dicho proveedor en 64 bits.
Desarrollo:
En el post anterior (leer aqui) habiamos construido un método, dentro de la clase correspondiente a la página, para leer archivos Excel, utilizando una sintaxis SQL y usando las areas de nombre, como nombres de tabla.
De esta forma, si teniamos un archivo, con una area que se llame “Datos”, podiamos obtener el contenido de dicha area a traves de la sentencia “SELECT * FROM Datos”.
Esto funciona a las mil maravillas en un entorno x86, como lo puede ser un servidor de 32 bits y/o el servidor web de depuración que incluye Visual Studio .NET.
El problema se produce al pasar la aplicación al servidor de producción donde nos encontramos con el siguiente error:
“The ‘Microsoft.ACE.OLEDB.12.0′ provider is not registered on the local machine.”
¿Que ocurre? ¿Con que alternativas de solución contamos?
Identificación del problema
Un error similar se reporta en Microsoft Connect https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=125117
De acuerdo a lo señalado en dicho foro, no se cuenta con una versión 64 bits del proveedor de base de datos para conectarse a archivos Excel (esto no es tán asi, pues recientemente Microsoft liberó la versión de 64 del OLEDB Provider, que deberia resolver el problema)
Alternativas de solución
Hasta la fecha, he encontrado tres alternativas para resolver este problema:
1. Puedes configurar Internet Information Server (IIS) para correr en 32 bits, a traves de una configuración WOW: Windows on Windows
(http://dotnetdeveloper.wordpress.com/2006/02/08/enabling-aspnet-11-on-windows-server-2003-x64) que permite ejecutar el IIS en 32-bit, dentro de un sistema operativo 64 bits.
2. Separar la funcionalidad de acceso a datos Excel en una componente, compilarla en modo x86 (32 bits), publicarla en el servidor de componentes y acceder a ella desde el proyecto web en modo x64 (64 bits)
3. Utilizar el “64-Bit OLEDB Provider para ODBC (MSDASQL)” para conectar a aplicaciones en entorno de 64 bits.
Descripción en http://citicr.org/blogs/noticias/archive/2008/07/03/64-bit-oledb-provider-para-odbc-msdasql.aspx.
Descargar desde http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en.
Todas las opciones tienen sus ventajas y desventajas, por lo que vale la pena evaluar correctamente cuál opción es la mas conveniente para el problema a tratar.
Alternativa 1: IIS ejecutado en 32 bits.
Está fue la primera opción que intentamos. Siguiendo las instrucciones que aparecen en el blog DotNetDeveloper, logramos que el IIS funcionara en modo x86 y la el proveedor de acceso a datos funcionó correctamente. El único problema fue que dejó de funcionar el sitio virtual de Reporting Services que teniamos instalado en el mismo servidor web y que corre bajo 64 bits.
La otra desventaja de esta opción es que se pierden los benificios de perfomance de trabajar en 64 bits, utilizando de manera restringida las capacidades del servidor.
Alternativa 2: Componentes de lectura de datos Excel en 32 bits y sitio web en 64 bits.
Finalmente, usamos esta opción. Se construyó una aplicación de libreria DataExcel32, compilada en modo x86. Luego de incluir dicha componente en el servidor de componentes del servidor, logramos utilizarla desde el sitio web. Con esto, separamos las funcionalidades de la aplicación y el IIS sigue corriendo en 64 bits, mientras que el acceso a datos Excel lo ejecuta una componente de 32 bits, que sí puede usar el proveedor de datos Excel Microsoft.ACE.OLEDB.12.0
Alternativa 3: Utilizar el OLEDB Provider de 64 bits.
Aún no he probado esta opción, pues este proveedor fue lanzado por Microsoft en forma posterior a la construcción de mi proyecto. Pese a ello, tengo mis dudas sobre usar esta opción, pues me significa usar dos proveedor de datos distintos: Uno de 32 bits para el servidor de desarrollo y depuración y otro de 64 bitspara el servidor de producción.
Pienso hacer las pruebas correspondientes y les contaré que tal me fue.






Hola Samuel. Estoy tratando de resolver este problema de leer archivos
Héctor | 22 Septiembre 2008Hola Samuel.
Estoy tratando de resolver este problema de leer archivos excel en un server windows 2003 Server x64 R2…
He tratado con las 3 alternativas que planteas, pero no he tenido éxito.
El server tiene el Framework v2.0.50727.
Con la primera alternativa sigo todos los pasos para hacer correr el IIS con WOW4, pero cuando abro una aplicación en Internet Explorer me arroja el mensaje: “Service Unavailable”.
La segunda alternativa me parece muy buena pero no puedo agregar la .dll en los servicios de componentes. Me entrega el siguiente mensaje: “One or more files do not contain components or types libraries. This files cannot be installed.”
Con la tercera, instalé el HotFix para OLEDB x64 pero no me funciona.
Si puedes ayudarme te lo agradecería mucho.
Saludos.
Casino 1250204539... Casino 1250204539...
Casino 1250204539 | 13 Agosto 2009Casino 1250204539…
Casino 1250204539…