Pergunta

Então eu aprendi que que o Microsoft.Jet.OLEDB.4.0 provedor de dados para consultar fontes de dados como arquivos Microsoft Access MDB e planilhas do Excel não funciona no um sistema operacional Windows de 64 bits.

O que estou agora suposto uso para consulta contra esses tipos de arquivo em .NET 3.5 (C #) aplicativos, a fim de garantir a compatibilidade tanto em x86 e x64 ambientes? eu percorri a internet e eu não consigo encontrar uma resposta direta sobre como lidar com essa incompatibilidade.

Eu também tentei usar um provedor ODBC e um provedor MSDASQL sem sorte como eles parecem lançar as mesmas exceções como o provedor Microsoft.JET.OLEDB.4.0 faz quando usado em um ambiente x64 (a menos que eu estou fazendo algo flagrantemente errado com esses outros dois fornecedores mesmo que eles funcionam bem sob no meu ambiente Windows XP x86).

Eu encontrei pessoas dizendo que eu preciso para usar % windir% \ system32 \ odbcad32.exe para conectividade ODBC em x64, mas eu tenho na ideia de como utilizar esta.

Exemplo Exeption jogado sob x 64:

************** exceção de texto ************** System.InvalidOperationException: O provedor 'Microsoft.Jet.OLEDB.4.0' não está registrado na máquina local. em System.Data.OleDb.OleDbServicesWrapper.GetDataSource (OLEDBConnectionString constr, DataSourceWrapper & datasrcWrapper) em System.Data.OleDb.OleDbConnectionInternal..ctor (OLEDBConnectionString constr, ligação OleDbConnection) em System.Data.OleDb.OleDbConnectionFactory.CreateConnection (opções DbConnectionOptions, Objeto poolGroupProviderInfo, DbConnectionPool piscina, DbConnection owningObject)

Foi útil?

Solução

Tudo o que eu vi em meus próprios confirma pesquisas recentes que você está vendo - que simplesmente não há um driver Jet de 64 bits. Além disso, eu encontrei um post em Esta discussão que parece confirmar que a 64-bit MSDASQL não vai ajudar, pois é realmente apenas um invólucro (ver o último post, datado de 08 de maio de Ricky Wen). Sua única opção é a ligação através de um proxy de 32 bits, talvez outro servidor SQL de 32 bits. I pode acabar fazendo isso mesmo, até que eu possa mover os dados Jet para SQL.

Outras dicas

o que está acontecendo aqui é que um x64 assembly está tentando chamar um componente x86 COM. O aplicativo x64 não vai ver os registros COM no Registro x64 principal, uma vez que eles estão na colméia Wow6432Node.

Mais fácil solução é criar o aplicativo com uma plataforma de destino x86 e deixá-lo correr na WOW mais tarde em sua máquina x64. O aplicativo será executado como de 32 bits e ser capaz de ver o 32-bit COM objetos que ele precisa.

Existe agora um driver ODBC de 64 bits para JetSQL. É o Microsoft Access Database Engine 2010 Redistributable . Eu nunca usei isso para OLEDB, mas eu tê-lo usado para fazer novos Microsoft Access com PowerShell .

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