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.
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”.
Imprime este post
5 comentarios sobre Error “System.Data.OleDb. OleDbException: Error no especificado” en ASP.NET al conectar con una base de datos con Microsoft Jet OleDb 4.0
¿y por que mantienes impersonate=true?
Para poder atentificar y autorizar identificando el usuario de Windows de forma sencilla.
[...] Nos hemos mudado, puedes encontrar los últimos comentarios y correcciones al post en: http://www.xperimentos.com [...]
Me gustaría saber si en el caso de la primera causa, también es necesario dar permisos a los usuarios de IIS (IWAM, IUSR e IIS_WPG).
También desde que nivel se deben asignar esos permisos, es decir le puedo asignar los permisos exclusivamente a la carpeta donde está el archivo Access o los permisos deben estar desde el comienzo de la ruta? por ejemplo: D:/ejemplo/base/ejemplo.mdb
Ya apliqué los dos puntos anteriores, pero sigue presentándose la excepción con cierta frecuencia. Hay algún aporte para esta situación?
Hola,
Tratare de responder de la mejor forma posible a cada uno de los puntos que planteas:
1) En principio no. En IIS 6 normalmente no se utiliza IWAN y IIS_WPG es el grupo de administradores donde suele estar IUSR y IWAN, luego con dar permisos a IUSR es suficiente para las carpetas. No obstante en este artículo de Microsoft puedes encontrar más información sobre la correcta configuración de los permisos en IIS 6, http://support.microsoft.com/?id=812614
2) Vale con asignar los permisos en la carpeta donde está el fichero (siempre que se configure como que los objetos hijo tienen que tener exactamente la misma configuración).
3) Lo único que creo que puede pasar es que los ficheros temporales (fichero .ldb en el caso de Access) no puede crearse porque no esten heredando correctamente los permisos. Prueba a asignar en la carpeta padre los permisos e indicar en la configuración avanzada que todos sus objetos hijos deben de heredar los mismos permisos.
Un saludo,
lcflores
Deja tu comentario sobre Error “System.Data.OleDb. OleDbException: Error no especificado” en ASP.NET al conectar con una base de datos con Microsoft Jet OleDb 4.0
*Nota: Sólo se tendrán en cuenta los comentarios correctamente redactados y que estén relacionados con el tema de la entrada.RSS a los comentarios de esta entrada · TrackBack URI