Pergunta

Eu tenho uma solução Visual Studio 2008 com dois projetos (um projeto Palavra-modelo e uma aplicação de consola VB.Net para testar). Ambos os projectos de referência um projeto de banco de dados que abre uma conexão para um arquivo de banco de dados MS-Access 2007 e ter referências a System.Data.OleDb. No projeto de banco de dados Eu tenho uma função que recupera uma tabela de dados da seguinte maneira

 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 chamar essa função de minha Word 2007 projeto Template tudo bem funciona; Sem erros. Mas quando eu executá-lo a partir da aplicação de consola que lança a seguinte exceção

ex = { "O 'Microsoft.ACE.OLEDB.12.0' provedor não está registrado na máquina local. "}

Ambos os projetos têm a mesma referência e a aplicação da consola fez trabalho quando escrevi pela primeira vez (há um tempo atrás), mas agora ele parou de trabalho. Devo estar faltando alguma coisa, mas eu não sei o que. Alguma idéia?

Foi útil?

Solução

Eu tenho um programa Visual Basic com Visual Studio 2008 que usa um banco de dados Access 2007 e estava recebendo o mesmo erro. Eu encontrei alguns tópicos que aconselhou a mudar a configuração de compilação avançada para x86 encontradas nas propriedades 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.

Outras dicas

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

1) garantir que o motor de banco de dados 2007 é instalado, este pode ser baixado em: http://www.microsoft.com /downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) gerente IIS7 aberta, e abrir a área de pools de aplicativos. Na barra lateral direita, você verá uma opção que diz "Definir padrões pool de aplicativos". Clique nele e uma janela pop-up com as opções.

3) a segunda para baixo campo, que diz 'Permitir aplicativos de 32 bits' é provavelmente definida como FALSE por padrão. Basta clicar onde diz 'falso' para mudá-lo para 'true'.

4) Reinicie o pool de aplicativo (você pode fazer isso por bater RECICLAR em vez de STOP, em seguida, começar, que também funcionará).

5) feito, e sua mensagem de erro vai embora.

Você está executando um sistema de 64 bits com o banco de dados em execução de 32 bits, mas o console em execução de 64 bits? Não há drivers de MS Access que funcionam 64 bits e iria relatar um erro idêntico ao seu relatado.


Solução:

É isso aí! Graças Arjun Paudel para o link. Aqui está a solução como encontrado em do XNA Criador Clube Online. É por Stephen Styrchak.

O seguinte erro sugere-me a acreditar 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á seguindo os passos válidos em 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


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

Parece que uma longa lista de passos, mas quando você sabe onde essas coisas são de que é muito mais fácil. Qualquer um que só tem VC# Express provavelmente vai encontrar este útil. Uma vez que você sabe sobre Configuration Manager, vai ser muito mais intuitivo na próxima vez.

1.In VC # Express 2005, ir para Tools -> Options.
2.In o canto inferior esquerdo da caixa de diálogo Opções, marque a caixa que diz, "Show all settings".
3.In a árvore-view no lado esquerdo, selecione "Projects and Solutions".
4.In as opções à direita, marque a caixa que diz, "Show advanced build configuraions."
5.Click OK.
6.Go para Build -> Configuration Manager ...
7.In a coluna Platform ao lado de seu projeto, clique no combobox e selecione "<New...>".
8.In o "New platform" setting, choose "x86".
9.Click OK.
10.Click Close.
Há, agora você tem uma configuração x86! Fácil como a torta! : -)

Eu também recomendo o uso Configuration Manager para apagar a plataforma Qualquer CPU. Você realmente não quer que se você tiver depedencies em 32 bits DLLs (mesmo dependências indiretas) nativos.

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


Eu pensei que eu gritei porque eu encontrei esta pergunta diante de um contexto um pouco diferente do problema e pensei que poderia ajudar outras almas atormentadas no futuro:

Eu tive um aplicativo ASP.NET hospedado no IIS 7.0 em execução no Windows Server 2008 64-bit.

Uma vez que o IIS está no controle do bitness processo, a solução no meu caso foi para definir a configuração Enable32bitAppOnWin64 para true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you- can-agora-run-32-bit-e-64-bit aplicações-on-the-same-server.aspx

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

Estou tendo mesmo problema. Eu tento instalar o Office 2010 de 64 bits no Windows 7 64 bits e, em seguida, instale o 2007 Office System motorista:. Dados Componentes Conectividade

Depois disso, o Visual Studio 2008 pode abrir uma conexão com um arquivo de banco de dados MS-Access 2007.

Veja o meu post em um segmento semelhante Stack Troca https://stackoverflow.com/a/21455677/1368849

Eu tinha a versão 15, não 12 instalado, que eu descobri, executando este código PowerShell ...

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

... que me deu este resultado (eu removi outras fontes 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 um totalmente atualizado de 64 bits do Windows Vista família com um aplicativo .NET que eu tenho compilado para 32 bits somente - o programa é instalado na pasta programx86 em 64 máquinas bit. Ele falha com essa mensagem de erro mesmo a 2007 provedor de banco de dados de acesso instalado, com / wiothout o SP2 do mesmo instalado, o IIS instalado e conjunto de pool de aplicativo para suporte de 32 bits aplicativo ... sim, eu tentei todas as soluções em todos os lugares e ainda sem sucesso.

Eu troquei meu aplicativo para ACE OLE DB.12.0 porque JET4.0 estava falhando em máquinas de 64 bits - e há melhor: - / O segmento mais promissor que eu encontrei foi o seguinte:

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

mas quando você tentar instalar o bit 64 "2010 Office System driver beta: Componentes Os dados Conectividade" que diz que você não pode instalar a versão de 64 bit sem desinstalar todos os aplicativos do Office de 32 bits ... e instalar o 32 bits versão do 2010 Office System driver beta: Componentes os dados Conectividade não resolve 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) recomendar.

A minha próxima tentativa será a de seguir esta mensagem:

O problema é devido ao sabor errado de OLEDB32.DLL e Oledb32r.dll sendo registrado no servidor. Se as versões de 64 bits são registrados, eles precisam ter o registro cancelado, e, em seguida, as versões de 32 bits registrado em seu lugar. Para corrigir isso, cancelar o registro das versões localizadas em Arquivos de Programas%% / Arquivos comuns / OLE DB / System. Em seguida, registrar as versões ao mesmo caminho, mas no% Arquivos de Programas (x86) anuário%.

Tem mais alguém teve tantos problemas com ambos JET4.0 e provedores OLEDB ECA em 64 máquinas bit? Alguém já encontrou uma solução se nenhum dos outros trabalhos?

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

  1. Instale o Database Engine Microsoft Access 2010 x86 Redistributable, esta instalação está disponível em: http://www.microsoft.com/download/en/details.aspx ? id = 13255 .
  2. Os dados Componentes de Conectividade de Office 2007, esta instalação é disponível em: http://www.microsoft.com/download/en/confirmation.aspx ? id = 23734 .
  3. Microsoft Access Database Engine 2010 x64 Redistributable. Você irá precisa baixar o pacote localmente e executá-lo com uma bandeira passiva. 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 a bandeira '/ passiva'. No prompt de comando execute o seguinte comando: 'AccessDatabaseEngine_x64.exe / passiva'

Nota:. A ordem parece importar - por isso, se você tem alguma coisa já instalado, desinstale e siga os passos acima

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top