OLEDBConnection.Open () genera 'Error no especificado'

Tengo una aplicación que carga un archivo Excel .xls al sistema de archivos, abre el archivo con un objeto oledbconnection usando el método .open() en la instancia del objeto y luego almacena los datos en una base de datos. La carga y escritura del archivo en el sistema de archivos funciona bien, pero aparece un error al intentar abrir el archivo en nuestro servidor de producción solamente . La aplicación funciona bien en otros dos servidores (servidores de desarrollo y prueba).

El siguiente código genera un 'Error no especificado' en Exception.Message.

Cita:

        System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
        try
        {
            x.Open();
        }
        catch (Exception exp)
        {
            string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs.  " + exp.Message;
            Utilities.SendErrorEmail(errorEmailBody);
        }

: Cita final

La carpeta c: \\ temp yc: \ Documents and Settings \\ aspnet \ local settings \ temp del servidor da a \ aspnet control total.

Creo que hay algún tipo de problema de permisos, pero parece que no hay diferencia entre los permisos de las carpetas indicadas y la carpeta/directorio donde se carga el archivo de Excel. La misma ubicación se usa para guardar el archivo y abrirlo, y los métodos sí funcionan en mi estación de trabajo y en dos servidores web. Servidores Windows 2000 SP4.

0
agregado editado
Puntos de vista: 2

6 Respuestas

¿Algo en la excepción interna? ¿Es esta una aplicación de 64 bits? Los proveedores OLEDB no funcionan en 64 bits. Debes tener tu aplicación objetivo x86. Encontré esto cuando recibí un error al tratar de abrir Access DB en mi computadora de 64 bits.

0
agregado

Sip. Yo también lo hice. Eliminé IMEX = 1, eliminé Propiedades extendidas, etc. Logré romperlo en los servidores de desarrollo y prueba. :) Los volví a poner en uno a la vez hasta que se corrigió el desarrollo y la prueba de nuevo, pero todavía no había workie en prod.

0
agregado

Si está utilizando una suplantación, deberá otorgar permiso al usuario de suplantación en lugar de/además del usuario aspnet.

0
agregado

He obtenido ese error por encima de los permisos, pero parece que lo tienes cubierto. También lo he visto con una de las banderas en la cadena de conexión; podría jugar con eso un poco.

0
agregado
De Verdad? Esta respuesta resolvió tu problema?
agregado el autor juan, fuente

Intenta envolver la ubicación entre comillas simples

System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
0
agregado

Si bien el problema de permisos puede ser más común, también puede encontrar este error desde el sistema de archivos de Windows/Access Jet DB, límite de conexión del motor, 64/255, creo. Si rechaza las 255 conexiones concurrentes de lectura/escritura de acceso o el límite de conexión 64 (?) Por proceso, puede obtener este mismo error exacto. Al menos me he encontrado con eso en una aplicación donde las conexiones se crean continuamente y nunca se cierran adecuadamente. Un simple Conn.close (); apareció y la vida era buena. Imagino que Excel podría tener problemas similares.

0
agregado
Como nota al margen: Conn.Dispose() aparentemente no cierra la conexión.
agregado el autor Residuum, fuente