jump to navigation

Cargar un Archivo de Excel en SQL Server 2008 x64 March 27, 2010

Posted by juanpablo1manrique in Business Inteligent, Developer, Excel 2007, Excel Services, Office 2010, SQL SERVER 2008.
Tags: ,
trackback

En estos días he estado desarrollando un procedimiento para cargar un archivo de Excel en SQL, todo estaba funcionando perfecto hasta que toco subir el archivo a un servidor de SQL server x64.

En el ambiente de desarrollo estaba utilizando Microsoft.Jet.OLEDB.4.0 pero al subirlo al servidor aparece un error que dice:

  • The OLE DB provider “Microsoft.Jet.OLEDB.4.0” has not been registered.

Buscando en internet encontré que para el servidor de x64 el nuevo proveedor es Microsoft.ACE.OLEDB.12.0, pero igualmente salió un error que decía:

  • The OLE DB provider “Microsoft.ACE.OLEDB.12.0” has not been registered.

Buscando en Internet encontré que se debían ejecutar las siguientes sentencias:

  • EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’AllowInProcess’, 1
  • EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’DynamicParameters’, 1
  • exec sp_configure ‘Advanced’, 1
  • RECONFIGURE
  • exec sp_configure ‘Ad Hoc Distributed Queries’, 1
  • RECONFIGURE
  • exec sp_configure ‘xp_cmdshell’, 1
  • RECONFIGURE
  • GO
  • sp_configure ‘show advanced options’, 1
  • GO
  • RECONFIGURE WITH OverRide
  • GO
  • sp_configure ‘Ad Hoc Distributed Queries’, 1
  • GO
  • RECONFIGURE WITH OverRide
  • GO

Pero seguía presentándose el error:

  • Cannot create an instance of OLE DB provider “Microsoft.ACE.OLEDB.12.0” for linked server “(null)”.

Esto se debe a que Microsoft en el lanzamiento de SQL SERVER 2008 x64 no hizo un proveedor para poder cargar archivos de Excel, el COLMO NO. Menos mal este problema lo tuve hace poco y descubrí que los componentes de conectividad de Office 2010 ya traen este proveedor los cuales se pueden descargar desde:

http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en

Con lo cual se instala el proveedor y la sentencia:

  • SELECT * INTO SourceDimBalance FROM OPENROWSET(
  • ‘Microsoft.ACE.OLEDB.12.0’,
  • ‘Excel 12.0;Database=c:\TEMP\DimBalance.xlsx;HDR=YES’,
  • ‘SELECT * FROM [Hoja1$]’)

 

Funciona correctamente!!!!

Advertisements

Comments»

1. Ruben Dario - April 23, 2010

Hola
Al igual que tu, me marcaron todos estos errorres pero a mi me sigue marcando el ultimo error que te marco

Mens. 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 “(null)”.

Ya tengo instalado “2010 Office System Driver Beta: Data Connectivity Components”

Ayuda ¿Que mas puedo hacer?

juanpablo1manrique - April 26, 2010

Antes de poderte responder, entregame la siguiente información.
Que usuario esta corriendo el servicio de SQL service.
Con que usuario estas ejecutando el código que nombras.
Que usuario utiliza tu aplicación para correr el código.
Es una instalación en Cluster o StandAlone
Estas seguro que estas ingresando bien el nombre o tal vez estas cambiando .xls por .xlsx

El usuario con el que se corre el código debe tener el rol de bulkadmin
Saludos

2. Ruben Dario - April 28, 2010

*El usuario que esta corriendo el servicio de Sql Service se llama Sql2008services, y el usuario con que me logueo al Windows Server 2008 es de Administrador.

*Con el Management Studio uso el usario de sa para ejecutar la query

*La instalación es StandAlone.

*Solo para leer el contenido del archivo estoy ejecutando este query
SELECT * FROM OPENDATASOURCE(‘Microsoft.Ace.OLEDB.12.0’,
‘Data Source=E:\Reportes\RepNavieras.xls;Extended Properties=EXCEL 12.0’)…[RepNavieras$] ;

*La carpeta donde esta este archivo le agregue el usuario Sql2008services con los permisos de control total.

3. Ruben Dario - May 3, 2010

Hola Juan Pablo, Ya quedo resuelto el problema, lo unico que faltaba era reiniciar el servidor.

Gracias.

sds.

4. Victor Velez - August 31, 2010

Muchas gracias fue de mucha ayuda tu comentario

5. Alex - October 16, 2010

Muchas gracias Amigo. Logre solucionar mi problema.

6. Jordi Santos - November 9, 2010

Muchas Grácias. Me ha sido muy útil tu post

7. Eduardo Fuentes - December 15, 2010

Hola Juan Pablo
Yo tengo el siguiente problema:
Tengo una SQL 2000 con unas base de datos y por otra parte otro SQL 2005 montado en un cluster con dos intancias. Quiero crear un linkserver hacia esa instancia 2 pero me da un error de Servidor no existe o acceso denagado. lo mismo me pasa para crear un odbc desde un windows 2003 hacia esa misma instancia del cluster

juanpablo1manrique - December 15, 2010

Asegurate que la instancia a la que intentas conectarte tiene habilitadas las conexiones remotas por TCP y NamePipes, y que el puerto 1433 se encuentra abierto.

8. Eduardo Fuentes - December 16, 2010

Estimado Juan Pablo
estan habilitadas las conexiones remotas y el puerto igual. te cuento para crear el odbc en una maquina con XP funciona con el namePipes pero con windows server 2003 no funciona. en el caso de linkserver te cuento que desde un server que esta en la misma ubicacion (sucursal) funciona perfecto pero desde otra sucursal (sucursal 2) no funciona, y ya se probo que el firewall no este interfiriendo.

Atto a tus comentarios y gracias por tu aporte

9. Kerri - January 19, 2011

In order for me to make importing Excel (.xlsx) files into SSIS 2008 on a 64-bit server (AccessDatabaseEngine.exe), I had to install the 32-bit driver. Program my SSIS package. the uninstall the 32-bit driver and install the 64-bit driver. Then run the SSIS package.

What is very odd is that if I try and keep the 32-bit driver, the SSIS package fails. If I try to program with the 64-bit driver it fails.

In order to edit I have to take off 64-bit, put on 32-bit, then edit the ssis (and of course reverse to run it).

juanpablo1manrique - January 19, 2011

I’m sorry i dont have the answer

10. Emerino - May 12, 2011

excelente respuesta, muchas gracias por la ayuda. Me funcionó sin problemas.

11. EvilDesgar - December 11, 2011

Amigo que pasa si el servicio de SQL no se levanta por un usuario especifico ? es decir que pasa si el usuario es el Local system

Cuando ejecuto el query con un sysadmin funciona ok, pero cuando ejecuto el query con un usuario de sql que solo es db_owner pues no funciona

Sabes que puedo hacer, sin convertir el usuario en sysadmin o sin tener que compartir el directorio ?

juanpablo1manrique - December 12, 2011

Puedes comentarme un poco más acerca del Query que intentas ejecutar para determinar mejor que puede estar sucediendo

12. Lizardo Ramirez - January 17, 2012

Saludos,
Tengo un proceso de distribucion de un archivo que importe desde excel a una tabla de sql server 2008, ocurre que cuando corro el proceso en una pc con una instacia del SQL Server 2008 R2, esta durando promedio 6 minutos.

mas sin embargo cuando corro ese mismo proceso en un servidor de con la misma base de datos y la misma version de sql server, en este me dura un promedio de 30 minutos, alguien me puede dar un “F1”, por favor!!!

juanpablo1manrique - January 17, 2012

Puedes enviarme el procedimiento de como lo estas cargando, juan_pablo_manrique@hotmail.com

13. JOse - January 23, 2012

Hola juan pablo, te agradecería que leyeses mi problema. He instalado VS2010 en un ordenador nuevo con win7 64bits y cuando intento conectar con una base de datos access 2010 con “add connection” me sale el error “Microsoft.ACE.OLEDB.12.0 is not registered in the local machine”… ¿como se registra esto?. Gracias por adelantado

juanpablo1manrique - January 23, 2012

En el caso de Win 7 instala igualmente el proveedor que encuentras en la siguiente dirección. http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en

14. JOse - January 24, 2012

GRacias por la respuesta Juan Pablo. He descargado el archivo
AccessDatabaseEngine_X64.exe porque mi sistema operativo es de 64 bits así que he supuesto que es éste el archivo correcto. Lo he instalado y todo sigue igual, cuando hago add connection me sale el mensajio de marras de que Microsoft.ACE.OLEDB.12.0 is not registered in the local machine
Alguna idea de que puede ocurrir?
Por cierto, ¿que debo elegir en las opciones de compilar? AnyCpU x64 x86
gracias de nuevo

15. JOse - January 24, 2012

Mas cosas, despues de instalar AccessDatabaseEngine_X64 abro una solucion nueva, pongo en las opciones de compilacion AnyCPU

escribo este código

cnMain.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MIBDD\f.accdb”
cnMAin.Open()
If cnMain.State = ConnectionState.Open Then
MsgBox(“Conexión abierta”, vbExclamation)
End If

y funciona!!! la conexión se abre. Ahora voy a la ventana server explorer-> Data connections intento hacer add connection y me sale el mensaje de error…

juanpablo1manrique - January 24, 2012

Ingresa a tu instancia de SQL -> Server Objects -> Linked Servers -> Providers y busca que esta el proveedor, sino sigue los pasos del articulo

16. JOse - January 26, 2012

gracias por la respuesta juan pablo… No se como se hace esto último que dices, ¿donde está server objects?

17. m - June 4, 2013

tiene mucho que ver que office tienes instalado si 32 o 64 asi que mejor chequenlo yo resolvi desinstalando el 32 e instalando el 64

18. Noe - June 26, 2013

Que tal Juan Pablo, yo tengo un problema similar, hice un paquete con el asistente de Integration Services y al ejecutar el paquete me manda este error: [Connection manager “DestinationConnectionExcel”] Error: The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not registered. If the 64-bit driver is not installed, run the package in 32-bit mode. Error code: 0x00000000.
An OLE DB record is available. Source: “Microsoft OLE DB Service Components” Hresult: 0x80040154 Description: “Clase no registrada”. Hice lo que indicas arriba pero nada. Por favor ayúdame. Gracias,

juanpablo1manrique - June 27, 2013

Despues de asignar el Microsoft.ACE.OLEDB.12.0 que error te aparece

19. walter - October 21, 2013

Hola Juan Pablo,
tu solucion me funciono bien una pc con sql2012 64bits y msoffice64bits, pero en otra pc sql2012 32bits y office64bits no me funciono, que me recomiendas

juanpablo1manrique - November 6, 2013

Ahi puedes instalar Office 32bits y usar el Microsoft.Jet.OLEDB.4.0

20. Orfila - May 27, 2014

Hola, buenas tardes, tengo un problema con el Microsoft ACE OLEDB 12.0, me funciona perfectamente un archivo excel localmente, es decir un archivo desde mi pc, pero si quiero abrir un archivo en red me sale error: El proveedor OLE DB “Microsoft.ACE.OLEDB.12.0” del servidor vinculado “(null)” informó de un error. El proveedor no proporcionó información acerca del error.
Como podria dar solucion para abrir archivos en red?
Gracias

Saludos.

juanpablo1manrique - May 27, 2014

Puede ser tema de permisos de administrador sobre el archivo, asegurate que el usuario con el que corre el proceso que intenta abrir el archivo tenga los permisos correspondientes


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: