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!
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" ...