O provedor Microsoft.ACE.OLEDB.12.0 não está registrado

Eu tenho uma solução do Visual Studio 2008 com dois projetos (um projeto de modelo do Word e um aplicativo de console VB.Net para teste). Ambos os projetos fazem referência a um projeto de database que abre uma conexão com um arquivo de database do MS-Access 2007 e possui referências a System.Data.OleDb. No projeto de database eu tenho uma function que recupera uma tabela de dados da seguinte forma

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 

Quando eu chamo essa function do meu projeto de modelo do Word 2007 tudo funciona bem; Sem erros. Mas quando eu o executo a partir do aplicativo de console, ele lança a seguinte exceção

ex = {“O provedor ‘Microsoft.ACE.OLEDB.12.0’ não está registrado na máquina local.”}

Ambos os projetos têm a mesma referência e o aplicativo de console funcionou quando eu o escrevi pela primeira vez (há algum tempo), mas agora ele parou de funcionar. Eu devo estar perdendo alguma coisa, mas não sei o quê. Alguma ideia?

Eu tenho um programa visual básico com o Visual Studio 2008 que usa um database do Access 2007 e estava recebendo o mesmo erro. Eu encontrei alguns tópicos que recomendaram mudar a configuração de compilation avançada para x86 encontrada nas propriedades dos programas, se você estiver executando um sistema de 64 bits. Até agora eu não tive nenhum problema com o meu programa desde então.

Basicamente, se você estiver em uma máquina de 64 bits, o IIS 7 não está (por padrão) servindo aplicativos de 32 bits, nos quais o mecanismo de database opera. Então, aqui está exatamente o que você faz:

1) certifique-se de que o mecanismo de database de 2007 está instalado, isso pode ser baixado em: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) abra o gerenciador do IIS7 e abra a área Application Pools. Na barra lateral direita, você verá uma opção que diz “Definir padrões do pool de aplicativos”. Clique nele e uma janela irá aparecer com as opções.

3) o segundo campo inativo, que diz “Ativar aplicativos de 32 bits”, provavelmente está definido como FALSE por padrão. Basta clicar onde diz “falso” para alterá-lo para “verdadeiro”.

4) Reinicie seu pool de aplicativos (você pode fazer isso pressionando RECYCLE em vez de STOP e START, o que também funcionará).

5) feito, e sua mensagem de erro irá embora.

Você está executando um sistema de 64 bits com o database executando 32 bits, mas o console executando 64 bits? Não há drivers do MS Access que executam 64 bits e relatariam um erro idêntico ao relatado.


Solução:

É isso aí! Obrigado Arjun Paudel pelo link. Aqui está a solução encontrada no XNA Creator’s Club Online. É de Stephen Styrchak.

O seguinte erro sugere que eu acredite que você está compilando para 64 bits:

O provedor ‘Microsoft .ACE.OELDB.12.0’ não está registrado na máquina local

Eu não tenho edição expressa, mas estão seguindo as etapas válidas em 2008 express?

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

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


No VC# Express , esta propriedade está faltando, mas você ainda pode criar uma configuração x86 se souber onde procurar.

Parece uma longa lista de etapas, mas quando você sabe onde essas coisas estão, é muito mais fácil. Qualquer um que tenha apenas o VC# Express provavelmente achará isso útil. Depois de saber sobre o Configuration Manager , será muito mais intuitivo da próxima vez.

1. No VC # Express 2005, vá para Tools -> Options .
2. No canto inferior esquerdo da checkbox de diálogo Opções, marque a checkbox que diz "Show all settings" .
3. Na exibição em tree no lado esquerdo, selecione "Projects and Solutions" .
4. Nas opções à direita, marque a checkbox que diz "Show advanced build configuraions."
5. Clique em OK .
6.Go para Build -> Configuration Manager
7. Na coluna Plataforma, ao lado do seu projeto, clique na checkbox combinada e selecione "" .
8. Na "New platform" setting, choose "x86" .
9. Clique em OK .
10.Clique em Close .
Lá, agora você tem uma configuração x86! Fácil como torta! 🙂

Também recomendo usar o Configuration Manager para excluir a plataforma Any CPU. Você realmente não quer isso se você tiver deformações em DLLs nativas de 32 bits (mesmo dependencies indiretas).

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


Eu pensei que eu gritaria porque encontrei essa questão quando enfrentei um contexto ligeiramente diferente do problema e achei que poderia ajudar outras almas atormentadas no futuro:

Eu tinha um aplicativo ASP.NET hospedado no IIS 7.0 em execução no Windows Server 2008 de 64 bits.

Como o IIS está no controle da densidade do processo, a solução no meu caso foi definir a configuração Enable32bitAppOnWin64 como true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip- 2-você-agora-pode-executar-32-bit-e-64-bit-aplicativos-no-mesmo-server.aspx

Ele funciona de forma ligeiramente diferente no IIS 6.0 (não é possível definir o Enable32bitAppOnWin64 no nível do pool de aplicativos) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx? mfr = true

Estou com o mesmo problema. Eu tento instalar o office 2010 64bit no windows 7 de 64 bits e depois instalar o 2007 Office System Driver: Componentes de conectividade de dados.

depois disso, o visual studio 2008 pode abrir uma conexão com um arquivo de database do MS-Access 2007.

Veja minha postagem em um tópico similar do Stack Exchange https://stackoverflow.com/a/21455677/1368849

Eu tinha a versão 15, não 12 instalada, que descobri executando este código do PowerShell …

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

… o que me deu esse resultado (removi outras fonts de dados para brevidade) …

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

Eu tenho o mesmo erro em uma família de 64 bits completamente atualizada do Windows Vista com um aplicativo .NET que eu compilei apenas para 32 bits – o programa é instalado na pasta programx86 em máquinas de 64 bits. Ele falha com essa mensagem de erro mesmo com o provedor de database de access 2007 instalado, com / wioutout o SP2 do mesmo instalado, IIS instalado e conjunto de aplicativos para suporte a aplicativos 32bits … sim, tentei todas as soluções em todos os lugares e ainda não obtive êxito.

Mudei meu aplicativo para o ACE OLE DB.12.0 porque o JET4.0 estava falhando em máquinas de 64 bits – e não está melhor: – / O encadeamento mais promissor que encontrei foi este:

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

mas quando você tenta instalar o “2010 Office System Driver Beta: Componentes de Conectividade de Dados” de 64 bits, ele informa que você não pode instalar a versão de 64 bits sem desinstalar todos os aplicativos de escritório de 32 bits … e instalar a versão de 32 bits de 2010 Office System Driver Beta: Os componentes de conectividade de dados não resolvem o problema inicial, mesmo com “Microsoft.ACE.OLEDB.12.0” como provedor em vez de “Microsoft.ACE.OLEDB.14.0”, que essa página (e outros) recomenda.

Minha próxima tentativa será seguir este post:

O problema é devido ao sabor errado de OLEDB32.DLL e OLEDB32r.DLL sendo registrado no servidor. Se as versões de 64 bits estiverem registradas, elas precisarão ser desregistradas e, em seguida, as versões de 32 bits serão registradas. Para corrigir isso, cancele o registro das versões localizadas em% Program Files% / Common Files / System / OLE DB. Em seguida, registre as versões no mesmo caminho, mas no diretório% Program Files (x86)%.

Alguém mais teve tantos problemas com os provedores JET4.0 e OLEDB ACE em máquinas de 64 bits? Alguém encontrou uma solução se nenhum dos outros trabalhar?

Estou assumindo que, se você estiver executando um sistema de 64 bits com um database de 32 bits e tentando executar um console de 64 bits, os seguintes pacotes precisam ser instalados na máquina.

  1. Instale o mecanismo de database do Microsoft Access 2010 x86 Redistribuível, esta instalação está disponível em: http://www.microsoft.com/download/en/details.aspx?id=13255 .
  2. Componentes de conectividade de dados do Office 2007, esta instalação está disponível em: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
  3. Microsoft Access Database Engine 2010 x64 Redistribuível. Você precisará baixar o pacote localmente e executá-lo com um sinalizador passivo. Você pode baixar a instalação aqui: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Instalando usando o prompt de comando com o sinalizador ‘/ passive’. No prompt de comando, execute o seguinte comando: ‘AccessDatabaseEngine_x64.exe / passive’

Nota: A ordem parece ser importante – por isso, se você já instalou alguma coisa, desinstale e siga as etapas acima.