Querying Jet Databases/Excel files with C# under x64 OS
Asked Answered
P

3

3

So I have learned that that the Microsoft.Jet.OLEDB.4.0 data provider for querying data sources like Microsoft Access MDB files and Excel spreadsheets does not work under a Windows 64-bit operating systems.

What I am now supposed to use to query against these file types in .NET 3.5 (C#) applications in order to ensure compatibility in both x86 and x64 environments? I have scoured the Internet and I cannot seem to find a straight answer on how to handle this incompatibility.

I've also tried using an ODBC provider and a MSDASQL provider with no luck as they seem to throw the same exceptions as the Microsoft.JET.OLEDB.4.0 provider does when used in a x64 environment (unless I am doing something flagrantly wrong with these other two providers even though they work fine under in my Windows XP x86 environment).

I’ve found people saying that I need to use %WINDIR%\System32\odbcad32.exe for ODBC connectivity in x64 systems, but I have on idea how to utilize this.

Example Exeption Thrown Under x64:

************** Exception Text ************** System.InvalidOperationException: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine. at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)

Paulettapaulette answered 30/12, 2008 at 16:9 Comment(0)
B
2

Everything that I've seen in my own recent research confirms what you are seeing - that there simply isn't a 64-bit Jet driver. Also, I found a post on THIS thread that seems to confirm that the 64-bit MSDASQL won't help as it is really just a wrapper (see the last post, dated May 8 from Ricky Wen). Your only option is to link thru a 32-bit proxy, perhaps another 32-bit SQL server. I may end up doing this myself, until I can move the Jet data to SQL.

Bannon answered 30/12, 2008 at 17:13 Comment(2)
I just spent some time searching for an MSDN article I read just this past week and can't find it. My memory of it is that if you use the ACE OLEDB provider there is some method for using it in a 64-bit environment. Unfortunately, I can't find it now, but it might give someone a clue for searching.Gynarchy
This is no longer the case see my answerDemur
M
3

what's happening here is that a x64 assembly is trying to call a x86 COM component. The x64 app won't see the COM registrations in the primary x64 registry,since theyre in the wow6432node hive.

Easiest workaround is to build the application with a x86 target platform and let it run on the WOW later on your x64 machine. The app will run as 32-bit and be able to see the 32-bit COM objects it needs.

Makepeace answered 30/12, 2008 at 17:19 Comment(1)
Unfortunately this requirement of mine is just a small part of a major application. I don't want to force the entire app to go x86 due to this one silly feature. x86 builds are a last resort however.Paulettapaulette
B
2

Everything that I've seen in my own recent research confirms what you are seeing - that there simply isn't a 64-bit Jet driver. Also, I found a post on THIS thread that seems to confirm that the 64-bit MSDASQL won't help as it is really just a wrapper (see the last post, dated May 8 from Ricky Wen). Your only option is to link thru a 32-bit proxy, perhaps another 32-bit SQL server. I may end up doing this myself, until I can move the Jet data to SQL.

Bannon answered 30/12, 2008 at 17:13 Comment(2)
I just spent some time searching for an MSDN article I read just this past week and can't find it. My memory of it is that if you use the ACE OLEDB provider there is some method for using it in a 64-bit environment. Unfortunately, I can't find it now, but it might give someone a clue for searching.Gynarchy
This is no longer the case see my answerDemur
D
1

There is now a 64 bit ODBC driver for JetSQL. It is the Microsoft Access Database Engine 2010 Redistributable. I have not used it for OLEDB, but I have used it to make new Microsoft Access databases with PowerShell.

Demur answered 24/8, 2011 at 15:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.