Поставщик провайдера Microsoft ACE OLEDB не смог найти устанавливаемое исключение ISAM

Я пытаюсь читать электронные таблицы Excel с помощью 64-битного процесса. Поэтому я использую 64-битную версию Micorosft Access Database Engine 2010.

Следующий код

var cs = @"Provider=Microsoft.ACE.OLEDB.12.0;"
         + @"Data Source=C:\test.xls;"
         + @"Extended Properties=""Excel 14.0;""");

con = new OleDbConnection(cs);
con.Open();

выбросить исключение:

Не удалось найти устанавливаемый ISAM

С помощью google я нашел много вопросов об этом исключении. Но они относятся к JET и, похоже, не относятся к моей проблеме.

Любые рекомендации?

Ответ 1

Сегодня я столкнулся с той же проблемой. Моя конфигурация:

  • x64.NET 2.0 Desktop Application, которое читает файл XLSX.
  • версия 64 для Microsoft Access Database Engine 2010, распространяемая
  • Моя строка подключения включала атрибут Расширенные свойства со значением "Excel 14.0;", как документация из компонент читает.

У меня была точно такая же проблема: Не удалось найти устанавливаемое исключение ISAM. Я решил это после того, как наткнулся на эту статью, в которой говорится о наличии ошибки в документации по компонентам сайта MS. Я не уверен, что документация компонента неточна, и я могу сказать, что изменение Расширенных свойств на Excel 12.0 Xml решило проблему.

Ответ 2

У меня была точно такая же проблема, когда я пытался получить данные из файла Excel 2007.xlsx.

Обычно надежные драйверы "Microsoft.ACE.OLEDB.12.0" просто отказывались подключаться, выдавая ту же ошибку "Не удалось найти устанавливаемый ISAM", которую вы видели.

В конце концов я нашел этот код, который работал:

SELECT * FROM OPENROWSET('MSDASQL',
    'DRIVER=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb);
     DBQ=D:\Sample.xlsx', 'SELECT * FROM [Sheet1$]')

Надеюсь, это поможет!

(Адаптировано из окончательной публикации в этой теме: SQLTeam.com)

Чуть позже...

Теперь неожиданно моя исходная строка подключения работает. Раньше это не удавалось (до того, как я успешно подключился, используя приведенную выше строку MSDASQL), но теперь успешно работает.

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;Database=D:\Sample.xlsx;HDR=NO;IMEX=1', 
    'SELECT * FROM [Sheet1$]')

Странно, очень странно.

Ответ 3

После добавления кавычек в строку подключения ошибка ISAM исчезла (код ниже).

string GetConnectionString(string fileName)
{
    return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended   Properties=\"Excel 12.0;HDR=YES;\"";
}

Ответ 4

Я нашел установку 2013 года с Excel и инструментами и сохранил прежние версии. Затем выполните пользовательскую установку... затем откройте 2013 excel и закройте ее. Затем перейдите в панель управления и добавьте функции удаления, удаляющие excel с 2013 года. Затем откройте 2010 excel и дайте ей быстро обновить свою установку, а затем она работает без ошибок.

Ответ 5

Ссылка на " Эта статья" верна, но измените одинарные кавычки на Double Quotes. Я использую OpenFileDialog для получения любого файла excel. (Я использую Excel 2013 для тестирования)

= > Оригинальный формат в сообщении <=
// Новая версия, любой файл xls "Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = C:\AlmostAnyExcelVersionFileRunningUnder64BitOS.xls; Расширенные свойства = Excel 12.0; HDR = НЕТ; IMEX = 1;;"

= > Исправленный формат <=
XLConnection = "Provider = Microsoft.ACE.OLEDB.12.0; Источник данных =" и Chr (34) и ExceilFileDialog.FileName и Chr (34) и "; Расширенные свойства =" и Chr (34) и "Excel 12.0; HDR = нЕТ; IMEX = 1;" и Chr (34) и ";"