Hay un curioso problema al intentar acceder a un Excel / Access en un servidor Web mediante OLEDB y ASP.NET. Es algo trivial, pero puede haceros perder mucho tiempo. El error se produce al llamar al método “Connection.Open” para abrir una connexion a un fichero Access o Excel con ASP.NET y OleDb. Hay dos posibles causas:

Primera causa: La cuenta ASP.NET/Impersonated no tiene suficientes permisos para crear el fichero ldb.

  • Solución: Dar a la cuenta del usuario ASP.NET permisos de escritura/lectura a la carpeta donde está el fichero Excel/Access. Si estas utilizando “impersonation”, tienes que dar a la cuenta “impersonated” los permisos mencionados, es decir, a todos los usuarios que se vayan a conectar (con seguridad Windows).

Segunda causa: La cuenta “Impersonated” no tiene suficientes privilegios para crear los ficheros temporales.
Cuando  abres un fichero Excel o Access usando Jet, require la creación de ficheros temporales. Con ASP.NET estos ficheros temporales serán creados en el directorio:

“C:\Documents and Settings\<NombreServidor>\ASPNET\Local Settings\Temp”

Por defecto la cuenta del usuario ASP.NET tiene completo acceso a este directorio. Sin embargo, cuando estas usando “impersonation”, esta cuenta no tendrá acceso por defecto. En consecuencia, el proceso Jet no tendrá acceso a crear ficheros temporales cuando abre una conexión a un fichero Access o Excel con ASP.NET. Debido a esto, OleBd lanza una excepción sin un mensaje específico: “System.Data.OleDb.OleDbException: Error no especificado” o en inglés “System.Data.OleDb.OleDbException: Unspecified error”.

  • Solución: Dar permisos totales a la cuenta de “impersonated” a la carpeta mencionada. No está demás mirar el artículo de Microsoft donde encontraréis mas detalles.
Be Sociable, Share!