microsoft descargar tsql excel-2007 oledb openrowset isam

tsql - microsoft ace oledb 12.0 descargar



Cómo resolver el error "No se pudo encontrar ISAM instalable" para el proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" (9)

Hai también me enfrenté a esta situación lo resolví

Resuelto

string ConeectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFlp.Text + ";Extended Properties=/"Excel 12.0 Xml;HDR=YES/""); OleDbConnection oconn = new OleDbConnection(ConeectionString);</b>

Estoy intentando importar datos de los archivos de Excel 2007 (.xlsx) a SQL Server 2008 utilizando un comando T-SQL OpenRowset () con el "Microsoft.ACE.OLEDB.12.0" del proveedor OLE DB, y obtengo un mensaje persistente " No se pudo encontrar el ISAM instalable "error. Todo el hardware es de 32 bits.

[Revisado el 10 de enero de 2012 para tratar de centrarse más en las anomalías]

La siguiente sentencia T-SQL produce el error:

SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Data Source=C:/work/TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"'', ''SELECT * FROM [Sheet1$]'' )

Si guardo el archivo de Excel en el formato "Excel 97-2003" (.xls) y uso el proveedor anterior de Microsoft.Jet.OLEDB.4.0 para importar los datos, funciona bien. Esto me hace pensar que no es un problema de seguridad u otro problema ambiental.

SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database=C:/work/TestData.xls;HDR=YES'', ''SELECT * FROM [Sheet1$]'' )

Sin embargo, cuando intento el archivo * .xls con el proveedor Microsoft.ACE.OLEDB.12.0, que debería ser compatible con el formato * .xls, vuelve a fallar con el mismo error:

SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Data Source=C:/work/TestData.xls;Extended Properties="Excel 8.0;HDR=YES";'', ''SELECT * FROM [Sheet1$]'' )

También, curiosamente, cuando uso el asistente de "Importar datos ..." de SSMS, funciona bien. Guardé la salida del asistente de importación de datos como un paquete SSIS y busqué en el archivo SSIS para intentar averiguar cómo funciona, y ES exitosamente utilizando el proveedor Microsoft.ACE.OLEDB.12.0. Esta es la cadena de conexión del paquete SSIS:

<DTS:Property DTS:Name="ConnectionString"> Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/work/TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"; </DTS:Property>

También he realizado la configuración relevante de SQL Server para permitir la consulta distribuida OPENROWSET:

sp_configure ''show advanced options'', 1 reconfigure GO sp_configure ''Ad Hoc Distributed Queries'', 1 reconfigure GO

Si también configuro los siguientes valores * sp_MSset_oledb_prop * (que encontré en una publicación en algún lugar) ...

USE [master] GO EXEC master.dbo.sp_MSset_oledb_prop N''Microsoft.ACE.OLEDB.12.0'', N''AllowInProcess'', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N''Microsoft.ACE.OLEDB.12.0'', N''DynamicParameters'', 1 GO

... entonces el error cambia a "Error no especificado":

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". Msg 7303, Level 16, State 1, Line 1 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Sin embargo, no estoy seguro si esto es un error en sentido ascendente o descendente. (¿Es ahora encontrar el "ISAM instalable" pero fallar posteriormente?)

He intentado esto con varios archivos de Excel en dos máquinas / sistemas operativos diferentes (Windows Server 2003, Windows XP SP3). Ambas máquinas son de 32 bits.

También he intentado volver a instalar las versiones Office 2007 y Office 2010 de AccessDatabaseEngine.exe ( http://www.microsoft.com/download/en/details.aspx?id=23734 y http://www.microsoft.com/download/en/details.aspx?id=13255 , respectivamente), sin éxito.

Para resumir:

  • El proveedor "Microsoft.Jet.OLEDB.4.0" funciona con T-SQL, pero "Microsoft.ACE.OLEDB.12.0" no lo hace.
  • "Microsoft.ACE.OLEDB.12.0" funciona con el asistente "Importar datos ..." (por lo que puedo ver en el archivo de trabajo SSIS guardado).
  • Al establecer las propiedades "AllowInProcess" y "DynamicParameters" en "1", el error cambia a "Error no especificado". (¿Es eso un paso adelante ?!)

¿Alguna idea?


¡FINALMENTE, una solución!

Verifique esto: Mensaje 7302, Nivel 16, Estado 1, Línea 1 No se puede crear una instancia del Proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(nulo)"

Básicamente vas a

Panel de control> Herramientas administrativas> Servicios de componentes

luego expandir

Servicios de componentes> Computadoras> Mi computadora> Configuración DCOM

encontrar

MSDAINITIALIZE

ir

Propiedades> Seguridad> Permisos de inicio y activación

haga clic en

Personalizar> Editar ...

añada su nombre de usuario o "Todos" si lo prefiere

marque TODAS las casillas "permitir" para el nuevo usuario / grupo

y pulsa OK en ambas páginas

Ahora vea si su comando OpenRowSet / OpenDataSource funciona

Gracias a Ramesh Babu Vavilla (vr.babu) de social.technet.microsoft.com por el enlace


Asegurarme de que las citas en torno a la sección de propiedades ampliadas de la cadena de conexión lo solucionara. Agregué una propiedad adicional y no migré la cotización al final después de mi nueva propiedad.


Creo que la respuesta está oculta en la información del paquete SSIS que publicaste. El nuevo formato de archivo xlsx almacena los datos en formato XML en lugar del formato antiguo. Míralo de nuevo. Lee ... Propiedades extendidas = "Excel 12.0 XML; HDR = YES

No te pierdas ese XML después de las cosas estándar. (Para lo que vale la pena, también leí que necesita la "Macro 12.0 de Excel" para conectarse con un archivo xslm).

Darle una oportunidad. Raro pero esperemos que funcione.


Esto funcionó para mí:

SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;HDR=NO;Database=C:/temp/file.xlsx;'',[sheetname$])


PRUEBA esto te puede ayudar:

establecer path y strFileType según el requisito

string connString = ""; // string strFileType = Path.GetExtension(UpfileName.FileName).ToLower(); // string path = UpfileName.PostedFile.FileName; if (strFileType.Trim() == ".xls") { connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=/"Excel 8.0;HDR=Yes;IMEX=2/""; } else if(strFileType.Trim() == ".xlsx") { connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=/"Excel 12.0;HDR=Yes;IMEX=2/""; }


Prueba esto

SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''EXCEL 12.0;DataBase=C:/TEMP/test.xlsx;Extended Properties="EXCEL 12.0 Xml;HDR=YES'', [Sheet1$])


Si haces todo este post y continúas con el error te. tratar de asignar permiso en la carpeta pdf, a la cuenta

NT Service/MSSQLSERVER NT Service/SQLSERVERAGENT

funciona para mi


He resuelto con esta consulta:

SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;HDR=NO;Database=D:/Filename.xlsx;'', [SheetName$])

Parece que a sql no le gusta la sección "Propiedades Extendidas" ...