Запрос к файлам базы данных Jet /Excel с помощью C# в операционной системе x64

Итак, я узнал, что поставщик данных Microsoft.Jet.OLEDB.4.0 для запросов к источникам данных, таким как файлы Microsoft Access MDB и электронные таблицы Excel, не работает в 64-разрядных операционных системах Windows.

Что я теперь должен использовать для запросов к этим типам файлов в приложениях.NET 3.5 (C#), чтобы обеспечить совместимость в средах как x86, так и x64? Я искал в Интернете, и я не могу найти прямой ответ о том, как справиться с этой несовместимостью.

Я также безуспешно пытался использовать ODBC-провайдера и MSDASQL-провайдера, так как они, похоже, выдают те же исключения, что и провайдер Microsoft.JET.OLEDB.4.0, когда используются в среде x64 (если только я не делаю что-то вопиющее неправильно с эти два других провайдера, хотя они нормально работают в моей среде Windows XP x86).

Я обнаружил, что люди говорят, что мне нужно использовать %WINDIR%\System32\odbcad32.exe для подключения ODBC в системах x64, но у меня есть идея, как это использовать.

Пример исключения, брошенного под x64:

************** Текст исключения ************** System.InvalidOperationException: поставщик "Microsoft.Jet.OLEDB.4.0" не зарегистрирован в местная машина. на System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString CONSTR, DataSourceWrapper & datasrcWrapper) в System.Data.OleDb.OleDbConnectionInternal..ctor (OleDbConnectionString Возведение, подключение OleDbConnection) на System.Data.OleDb.OleDbConnectionFactory.CreateConnection (DbConnectionOptions варианту, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)

3 ответа

Решение

Все, что я видел в своем недавнем исследовании, подтверждает то, что вы видите - что просто нет 64-битного драйвера Jet. Кроме того, я нашел сообщение в ЭТОЙ ветке, в котором, похоже, подтверждается, что 64-битный MSDASQL не поможет, так как на самом деле это просто оболочка (см. Последнее сообщение от Рикки Вена от 8 мая). Единственный вариант - связать через 32-битный прокси, возможно, еще один 32-битный SQL-сервер. Я могу сделать это сам, пока не смогу переместить данные Jet в SQL.

Здесь происходит то, что сборка x64 пытается вызвать компонент COM x86. Приложение x64 не увидит регистрации COM в основном реестре x64, поскольку они находятся в кусте wow6432.

Самый простой обходной путь - это создать приложение с целевой платформой x86 и запустить его на WOW позже на вашем компьютере x64. Приложение будет работать как 32-битное и сможет видеть 32-битные COM-объекты, которые ему нужны.

Теперь для JetSQL существует 64-битный драйвер ODBC. Это Microsoft Access Database Engine 2010, распространяемый бесплатно. Я не использовал его для OLEDB, но я использовал его для создания новых баз данных Microsoft Access с PowerShell.

Другие вопросы по тегам