2008-10-26 73 views
66

Tengo una solución de Visual Studio 2008 con dos proyectos (un proyecto de plantilla de Word y una aplicación de consola VB.Net para probar). Ambos proyectos hacen referencia a un proyecto de base de datos que abre una conexión a un archivo de base de datos MS-Access 2007 y tiene referencias a System.Data.OleDb. En el proyecto de base de datos tengo una función que recupera una tabla de datos de la siguiente maneraEl proveedor de Microsoft.ACE.OLEDB.12.0 no está registrado

private class AdminDatabase 
    ' stores the connection string which is set in the New() method 
    dim strAdminConnection as string 

    public sub New() 
    ... 
    adminName = dlgopen.FileName 
    conAdminDB = New OleDbConnection 
    conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _ 
     "Provider=Microsoft.ACE.OLEDB.12.0" 

    ' store the connection string in strAdminConnection 
    strAdminConnection = conAdminDB.ConnectionString.ToString() 
    My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection) 
    ... 
    End Sub 

    ' retrieves data from the database 
    Public Function getDataTable(ByVal sqlStatement As String) As DataTable 
     Dim ds As New DataSet 
     Dim dt As New DataTable 
     Dim da As New OleDbDataAdapter 
     Dim localCon As New OleDbConnection 


     localCon.ConnectionString = strAdminConnection 

     Using localCon 
      Dim command As OleDbCommand = localCon.CreateCommand() 
      command.CommandText = sqlStatement 
      localCon.Open() 
      da.SelectCommand = command 
      da.Fill(dt) 
      getDataTable = dt 
     End Using 

    End Function 
End Class 

Cuando llamo a esta función de mi proyecto Word 2007 Plantilla todo funciona bien; sin errores. Pero cuando lo ejecuto desde la aplicación de consola que arroja la siguiente excepción

ex = { "La '' Microsoft.ACE.OLEDB.12.0 proveedor no se ha registrado en la máquina local ."}

Ambos proyectos tienen la misma referencia y la aplicación de consola funcionó cuando la escribí por primera vez (hace un tiempo) pero ahora ha dejado de funcionar. Debo extrañar algo, pero no sé qué. ¿Algunas ideas?

+0

También estoy enfrentando el mismo problema. ¿Pueden ayudarme? donde encontraré el instalador del proveedor de la base de datos de acceso 2007? –

+0

see -> http://stackoverflow.com/questions/6649363/ – Bernhard

Respuesta

41

Tengo un programa visual básico con Visual Studio 2008 que usa una base de datos de Access 2007 y recibía el mismo error. Encontré algunos hilos que aconsejaban cambiar la configuración de compilación avanzada a x86 que se encuentra en las propiedades de los programas si está ejecutando un sistema de 64 bits. Hasta ahora no he tenido ningún problema con mi programa desde entonces.

+4

Pero para una aplicación asp.net esto lo determina el IIS, así que consulte este artículo: http://support.microsoft.com/kb/894435/en-us – devzero

+5

Estaba teniendo el mismo problema en un ASP Aplicación .NET: ejecuta el código trabajado localmente, pero falla en el servidor. Necesario para instalar 2007 Office System Driver: Componentes de conectividad de datos aquí: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en, luego debe habilitar el proceso de trabajo (grupo de aplicaciones) para el sitio web para permitir aplicaciones de 32 bits. – Keith

+3

Esto no ayuda a las personas que no pueden usar x86. Existe una versión de ACE para 64 bits: http://goo.gl/Cxsf1, pero debe desinstalar Office 2003 porque allí hay problemas de compatibilidad. – Jordan

7

¿Está ejecutando un sistema de 64 bits con la base de datos ejecutando 32 bits, pero la consola ejecutando 64 bits? No hay controladores de MS Access que se ejecuten en 64 bits e informarán un error idéntico al que usted informó.

+0

Sí, estoy ejecutando 64bit XP y este fue exactamente el problema. Cambió la CPU de destino en Opciones de compilación avanzadas a la aplicación de bit x86 y todo funciona ahora. Gracias – Azim

5

Solución:

Eso es todo! Gracias Arjun Paudel por el enlace. Esta es la solución que se encuentra en XNA Creator's Club Online. Es por Stephen Styrchak.

El siguiente error que me sugiere para creer que se está compilando de 64 bits:

El proveedor Microsoft .ACE.OELDB.12.0 'no está registrado en la máquina local

I Dont ¿Tiene una edición expresa pero sigue los pasos válidos en 2008 Express?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Arjun Paudel


En VC# Express, esta propiedad no se encuentra, pero todavía se puede crear una configuración x86 si usted sabe dónde buscar.

Parece una larga lista de pasos, pero una vez que sabes dónde están estas cosas es mucho más fácil. Cualquiera que solo tenga VC# Express probablemente lo encuentre útil. Una vez que sepa sobre Configuration Manager, será mucho más intuitivo la próxima vez.

1.En VC# Express 2005, vaya a Tools -> Options.
2.En la esquina inferior izquierda del cuadro de diálogo Opciones, marque la casilla que dice, "Show all settings".
3.En la vista de árbol en el lado izquierdo, seleccione "Projects and Solutions".
4.En las opciones de la derecha, marque la casilla que dice, "Show advanced build configuraions."
5. Haga clic en OK.
6. Vaya a Build -> Configuration Manager ...
7.En la columna Plataforma junto a su proyecto, haga clic en el cuadro combinado y seleccione "<New...>".
8.En el "New platform" setting, choose "x86".
9.Haga clic en OK.
10.Haga clic en Close.
¡Allí, ahora tiene una configuración x86! ¡Muy fácil! :-)

También recomiendo usar Configuration Manager para eliminar la plataforma Any CPU. Realmente no quieres eso si alguna vez tienes dependencias en archivos DLL nativos de 32 bits (incluso dependencias indirectas).

Stephen Styrchak | XNA Game Studio Developer http://forums.xna.com/forums/p/4377/22601.aspx#22601


+0

Gracias por la información adicional y la explicación detallada sobre cómo cambiar el objetivo del compilador (x86 o 64 bits). – Azim

3

pensé que interrumpiría porque me encontré con esta pregunta cuando se enfrentan a un contexto ligeramente diferente del problema y pensó que podría ayudar a otras almas atormentadas en el futuro:

Tenía una aplicación ASP.NET alojada en IIS 7.0 ejecutándose en Windows Server 2008 de 64 bits.

Desde IIS está en el control del valor de bits proceso, la solución en mi caso era para establecer el Enable32bitAppOnWin64 establece el valor true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

Funciona de forma ligeramente diferente en IIS 6.0 (No se puede establecer Enable32bitAppOnWin64 en la aplicación de la piscina nivel) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

52

Básicamente, si está en una máquina de 64 bits, IIS 7 no está (de forma predeterminada) sirviendo aplicaciones de 32 bits, en las que opera el motor de la base de datos. Así que aquí es exactamente lo que haces:

1) asegurar que el motor de base de datos de 2007 se instala, esto se puede descargar en: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) gestor de IIS7 abierto, y abrir el área Grupos de aplicaciones. En la barra lateral derecha, verá una opción que dice "Establecer valores predeterminados del grupo de aplicaciones". Haga clic en él y aparecerá una ventana con las opciones.

3) el segundo campo hacia abajo, que dice 'Habilitar aplicaciones de 32 bits' probablemente esté configurado en FALSO por defecto. Simplemente haga clic donde diga 'falso' para cambiarlo a 'verdadero'.

4) Reinicie su grupo de aplicaciones (puede hacerlo presionando RECYCLE en lugar de STOP y luego START, que también funcionará).

5) hecho, y su mensaje de error desaparecerá.

+0

Esto funcionó para mí ... Visual Studio 2010 Premium, Windows Server 2008 R2, IIS 7, usando WCF en una aplicación web por niveles. – longda

+0

¡Gracias, exactamente lo que necesitaba! – Andy

+0

+1, tu recomendación funcionó. – Phil

1

Tengo el mismo error en una familia de Windows Vista totalmente actualizada de 64 bits con una aplicación .NET que he compilado solo para 32 bits: el programa está instalado en la carpeta programx86 en máquinas de 64 bits. Falla con este mensaje de error incluso con el proveedor de bases de datos de acceso 2007 instalado, con/sin el SP2 del mismo instalado, IIS instalado y el grupo de aplicaciones configurado para la compatibilidad con aplicaciones de 32 bits ...sí, he probado todas las soluciones en todas partes y aún no he tenido éxito.

Cambié mi aplicación a ACE OLE DB.12.0 porque JET4.0 estaba fallando en máquinas de 64 bits - Y no es mejor: -/El hilo más prometedor que he encontrado era la siguiente:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

pero cuando intenta instalar los "Componentes de conectividad de datos de 2010 Office System de 64 bits" de 64 bits, le dice que no puede instalar la versión de 64 bits sin desinstalar todas las aplicaciones de oficina de 32 bits ... e instalar la versión de 32 bits de 2010 Office System Driver Beta: Data Connectivity Components no resuelve el problema inicial, incluso con "Microsoft.ACE.OLEDB.12.0" como proveedor en lugar de "Microsoft.ACE.OLEDB.14.0" que esa página (y otros) recomendar.

Mi próximo intento será seguir este post:

El problema se debe al sabor equivocado de OLEDB32.DLL y Oledb32r.dll está registrado en el servidor. Si las versiones de 64 bits están registradas, deben ser no registradas, y luego las versiones de 32 bits registradas en su lugar. Para solucionar esto, anule el registro de las versiones ubicadas en% Program Files%/Common Files/System/OLE DB. A continuación, registre las versiones en la misma ruta, pero en el directorio% Archivos de programa (x86)%.

¿Alguien más ha tenido tantos problemas con proveedores JET4.0 y OLEDB ACE en máquinas de 64 bits? ¿Alguien ha encontrado una solución si ninguno de los otros funciona?

+0

Aquí encontrará información útil, pero como ya sabe, este estilo de escritura no es el preferido para stackexchange. Si limpió esto (y tal vez actualizó lo que terminó trabajando para usted, si todavía lo recuerda), esto se agregaría a la pregunta, especialmente dado que hay muy pocas referencias a las versiones posteriores a la 12.0 (y si deben usarse) actualmente en la red O, al menos, agradecería la actualización. – CWilson

2

Estoy teniendo el mismo problema. Intento instalar Office 2010 de 64 bits en Windows 7 de 64 bits y luego instalar 2007 Office System Driver: Componentes de conectividad de datos.

después de eso, visual studio 2008 puede abrir una conexión a un archivo de base de datos MS-Access 2007.

2

Ver mi post sobre un hilo similares Pila Cambio https://stackoverflow.com/a/21455677/1368849

que tenía la versión 15, no 12 instalado, lo que descubrí mediante la ejecución de este código PowerShell ...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 

... lo cual me dio este resultado (he quitado otras fuentes de datos para abreviar) ...

SOURCES_NAME    SOURCES_DESCRIPTION                  
------------    -------------------                  
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider 
1

estoy asumiendo que si está ejecutando un sistema de 64 bits con una base de datos de 32 bits y tratando de ejecutar una consola de 64 bits, los siguientes paquetes deben estar instalados en la máquina.

  1. instalar el motor de base de datos Microsoft Access 2010 x86 redistribuible, esta instalación está disponible en: http://www.microsoft.com/download/en/details.aspx?id=13255.
  2. Conectividad de datos Componentes de Office 2007, esta instalación es disponible en: http://www.microsoft.com/download/en/confirmation.aspx?id=23734.
  3. Microsoft Access Database Engine 2010 x64 redistribuible. Debe descargar el paquete localmente y ejecutarlo con un indicador pasivo. Puede descargar la instalación aquí: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Instalación utilizando el símbolo del sistema con el indicador '/ pasivo'. En el símbolo del sistema ejecute el siguiente comando: 'AccessDatabaseEngine_x64.exe/pasivo '

Nota: El orden parece importar; por lo tanto, si ya tiene algo instalado, desinstálelo y siga los pasos anteriores.

Cuestiones relacionadas