Запрос к базам данных Jet/файлам Excel с помощью C# под ОС x64

StackOverflow https://stackoverflow.com/questions/400684

  •  03-07-2019
  •  | 
  •  

Вопрос

Итак, я узнал, что 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:

************** Текст исключений *************Поставщик «Microsoft.Jet.OLEDB.4.0» не зарегистрирован на локальном компьютере.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 WhoreingObject)

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top