Как подключиться к различным версиям Excel из C#?

У меня есть программа, которая импортирует данные из Excel в набор данных. Для подключения к Excel я использую следующий код...

return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + 
fileName + "; Jet OLEDB:Engine Type=5;"+ "Extended Properties=\"Excel 8.0;\"");

Я только что получил новый компьютер с Excel 2010, и теперь попытка подключения не удается и выдает исключение, говорящее The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

Это потому, что новой версии Excel нужна другая строка подключения? Кто-нибудь сталкивался с этим?

РЕДАКТИРОВАТЬ: На самом деле я просто где-то читал, что использование класса System.Data.OleDbClient не требует, чтобы Excel даже был установлен на компьютере. Так что моя проблема, вероятно, не имеет ничего общего с Excel, а скорее с инструментом Microsoft.Jet. Мой компьютер работает под управлением Windows7 64 бит. Разве это не должно быть уже установлено?

3 ответа

Проверьте Microsoft Access Database Engine 2010 Вторично распространяемый.
Распространяемые файлы для других версий Excel также существуют.

Вам необходимо скомпилировать вашу программу специально для 32-битной системы, чтобы она работала в подсистеме WoW и вызывала 32-битную версию Jet. Как упомянуто выше, 64-битная версия провайдера Jet отсутствует и, вероятно, никогда не будет.

В Visual Studio вы делаете это, устанавливая целевой тип процессора в настройках проекта на x86 вместо Any или 64-bit.

Если у вас нет исходного кода для вашей программы, вы можете изменить.exe с помощью утилиты corflags.exe, которая поставляется с.NET framework и флагом /32bit+, но если это сборка со строгой подписью, вам понадобится. СНК, чтобы переподписать его, как только вы изменили его.

Вот ссылка на WoW64, если вам нужно больше подробностей: http://en.wikipedia.org/wiki/WoW64

Я считаю этот сайт полезным, если у меня есть вопросы по строке подключения.

http://www.connectionstrings.com/excel

Также взгляните на предыдущий вопрос SO:

Диагностика исключения OLEDB при запросе Excel 2010

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