Чтение из 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/