Запрос к файлам базы данных Jet / Excel с C # в операционной системе x64 - PullRequest
3 голосов
/ 30 декабря 2008

Итак, я узнал, что поставщик данных 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:

************** Exception Text ************** System.InvalidOperationException: поставщик «Microsoft.Jet.OLEDB.4.0» не зарегистрирован на локальном компьютере. в System.Data.OleDb.OleDbServicesWrapper.GetDataSource (OleDbConnectionString constr, DataSourceWrapper & datasrcWrapper) в System.Data.OleDb.OleDbConnectionInternal..ctor (OleDbConnectionString constr, соединение OleDbConnection) в System.Data.OleDb.OleDbConnectionFactory.CreateConnection (параметры DbConnectionOptions, объект poolGroupProviderInfo, пул DbConnectionPool, DbConnection owningObject)

Ответы [ 3 ]

3 голосов
/ 30 декабря 2008

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

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

2 голосов
/ 30 декабря 2008

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

1 голос
/ 24 августа 2011

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

...