XperimentoS

Experiencias Profesionales…

Error “System.Data.OleDb. OleDbException: Error no especificado” en ASP.NET al conectar con una base de datos con Microsoft Jet OleDb 4.0

Publicado por lcflores en 26th Abril 2007

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.

Post relacionados

  • Los 10 FrameWorks .Net que debería aprender en el 2007
  • Microsoft Office 2003 problema con SKU011.CAB
  • Silverlight 2.0
  • Copiar datos de Access a Excel de forma rápida
  • Las librerías del FrameWork .Net 3.5 serán OpenSource
  • 5 Respuestas en “Error “System.Data.OleDb. OleDbException: Error no especificado” en ASP.NET al conectar con una base de datos con Microsoft Jet OleDb 4.0”

    1. nirvana Dice:

      ¿y por que mantienes impersonate=true?

    2. lcflores Dice:

      Para poder atentificar y autorizar identificando el usuario de Windows de forma sencilla.

    3. Error "System.Data.OleDb. OleDbException: Error no especificado" en ASP.NET al conectar con una base de datos con Microsoft Jet OleDb 4.0 « XperimentoS Dice:

      […] Nos hemos mudado, puedes encontrar los últimos comentarios y correcciones al post en: http://www.xperimentos.com […]

    4. Caro Dice:

      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?

    5. lcflores Dice:

      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

    Dejar un Comentario

    XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

     
    Cerrar
    Enviar por Correo