Броски поставщика Microsoft ACE OLEDB не смогли найти устанавливаемое исключение ISAM - PullRequest
10 голосов
/ 20 августа 2010

Я пытаюсь читать электронные таблицы 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 и, похоже, не относятся к моей проблеме.

Есть какие-нибудь рекомендации?

Ответы [ 5 ]

1 голос
/ 11 января 2017

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

1 голос
/ 13 января 2012

У меня была точно такая же проблема, когда я пытался получить данные из файла 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$]')

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

1 голос
/ 15 мая 2014

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

string GetConnectionString(string fileName)
{
    return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended   Properties=\"Excel 12.0;HDR=YES;\"";
}
1 голос
/ 13 июля 2011

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

  • x64 .NET 2.0 настольное приложение, которое читает файл XLSX.
  • x64 версия Microsoft Access Database Engine 2010 распространяемая
  • Моя строка подключения включенаатрибут Extended Properties со значением «Excel 14.0;», как читает документация из компонента.

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

0 голосов
/ 25 января 2017

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

=> Исходный формат в посте <= <br>// Более новая версия, любой файл xls "Provider = Microsoft.ACE.OLEDB.12.0; Источник данных ='C: \ ПочтиAnyExcelVersionFileRunningUnder64BitOS.xls'; Расширенные свойства = 'Excel 12.0; HDR = NO; IMEX = 1;'; "

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

...