Чтение из Excel: Microsoft.Реактивный.Oledb для.Ошибка 4.0 в 64-разрядных системах

Я читаю содержимое листа excel в моем приложении, используя:

 OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0");
 _myDataSet = new DataSet();
 OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + "My Sheet" + "$]", con);

myCommand.Fill(_myDataSet);
con.Close();

это сбой в 64-битных системах с ошибкой:

Microsoft.Реактивный.Oledb для.4.0' поставщик не зарегистрирован на локальном компьютере

Как сделать эту работу в 64-разрядных машинах?

4 ответов


Microsoft.Реактивный.OLEDB не имеет 64-битной версии, только 32-битную. Скомпилируйте приложение как 32bit (цель платформы: x86 в опции сборки).


Microsoft выпустила дистрибутив драйвера с 64-разрядным драйвером, который работает для Access и Excel. Вы можете загрузить как 64-разрядную, так и 32-разрядную версии из MS скачать сайт. Страница загрузки также содержит краткое описание того, что вам нужно изменить в строке подключения для ссылки на драйвер ACE.

короче говоря, вы устанавливаете 64-разрядный дистрибутив драйвера, а затем меняете строку подключения на что-то вроде из:

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=""Excel 8.0;IMEX=1""";

Я не верю, что это работает... вижу этот вопрос: OleDB не поддерживается в 64-битном режиме?

проблема заключается в том, что COM/Interop не предназначен для 64-битных сред, и поэтому он не может быть зарегистрирован в 64-битном режиме.

вы можете заставить приложение .NET работать в 32-битном режиме на 64-битной машине, что позволит вам получить доступ к функциям OleDB.


забудьте об этом, используйте эти dll из codeplex, которые решают эту проблему. http://exceldatareader.codeplex.com/