Я пытаюсь получить данные из файла Excel при событии нажатия кнопки. Моя строка подключения:
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";
Когда я нажимаю на кнопку, я получил следующую ошибку:
Поставщик 'Microsoft.ACE.OLEDB.12.0' не зарегистрирован на локальном компьютере.
Я не знаю, как это исправить. Моя операционная система - Windows 7.
Ну, вам нужно установить его. Вы ищете:
Доступна 64-разрядная версия "Microsoft Access Database Engine 2010 Redistributable", которая позволит вам использовать поставщик Microsoft.ACE.OLEDB.12.0:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
Если вы используете загрузку из принятого ответа, вам нужно будет построить для x86, как указано @backtestbroker.com.
в зависимости от приложения (32/64 бит), используя соединение, которое вы могли бы просто установить
Резюме:
проверьте поставщиков с помощью команды powershell из 32-разрядной и 64-битной оболочки:
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
и вы увидите, какой поставщик может использовать ваша система
длинная история: строки можно найти с помощью http://live.sysinternals.com/strings.exe
например. на 64-битной системе с установленными 32-разрядными драйверами
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
даже в предстоящем офисе 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
вы найдете строки
Microsoft.ACE.OLEDB
Microsoft.ACE.Oledb.12.0
Office 2013 также поставляется с csi.dll
c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
который содержит Microsoft.ACE.OLEDB.15.0 "
и Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
который имеет версию Microsoft.ACE.OLEDB.16.0
Я получил эту ошибку/исключение в Visual Studio 2010, когда я изменил свою сборку в диалоговом окне Configuration Manager с "x86" на "Any CPU". Этот драйвер базы данных OLEDB, который я понимаю, работает только в x86 и не совместим с 64-битной версией. Изменение конфигурации сборки на x86 решило проблему для меня.
Первое, что вам нужно проверить, это ваша конфигурация сборки вашего приложения.
Если у вас создан ваш проект под платформой x86, то для того, чтобы решите, что вы должны установить следующие пакеты на свой машина:
Чтобы использовать поставщик Microsoft.ACE.OLEDB.12.0, вы должны установить распространяемый Microsoft Access Database Engine 2010 во-первых, эта установка доступна по адресу: http://www.microsoft.com/download/en/details.aspx?id=13255.
После завершения установки попробуйте запустить приложение, если это решает проблему, если нет, переходите к шагу 2.
Следующий шаг - необъяснимое обходное решение, которое работает для Office 2010, даже несмотря на то, что это компоненты для подключения к данным Office 2007. Я не совсем уверен, почему это работает, но это так, и это доказало свою эффективность практически во всех случаях. Вам необходимо установить драйвер системы Office 2007: компоненты подключения к данным, эта установка доступна по адресу: http://www.microsoft.com/download/en/confirmation.aspx?id=23734.
По завершении этой установки попробуйте запустить приложение, это должно решить проблему.
Если вы пытаетесь запустить приложение , созданное в x64 или AnyCPU платформа, я бы рекомендовал сначала проверить, что он работает как ожидалось под платформой x86. В случае, если он не работает под этим x86, выполните шаги в первой части и подтвердите, что он работает как ожидалось.
Я прочитал, что драйверы MS Access, включая базу данных OLEDB драйвер работает только под платформой x86 и несовместим с платформу x64 или AnyCPU. Но это кажется неверным. я подтвердило, что мое приложение запускалось при создании x86, тогда я установлен модуль базы данных доступа с использованием пассивного флага.
После этих двух шагов мне удалось запустить приложение после создания x64 или AnyCPU. Это, похоже, решило мою проблему.
Примечание. Порядок шагов, похоже, имеет значение, поэтому следуйте соответствующим образом.
AceRedist.msi /passive
.
Я установил драйверы MS и все еще не работал у меня. Затем я нашел этот пост в блоге, который решил проблему. Прочитайте его там, иначе используйте эти два изображения (связанные с этой записью) как sumramary TL;DR:
Для всех тех, кто все еще затронут этим.
Я получаю ошибку...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
... как описано OP, Шайлеш Саху.
У меня 64-битная Windows 7.
Моя проблема заключается в сценариях PowerShell, но использует строку подключения, похожую на сообщение OP, поэтому, надеюсь, мои результаты могут быть применены к С#, PowerShell и любому другому языку, использующему драйвер Microsoft.ACE.OLEDB.
Я следил за инструкциями на этом форуме MS: http://goo.gl/h73RmI
Сначала я попробовал установить 64-битную версию, а затем установил 32-разрядную версию AccessDatabaseEngine.exe с этой страницы http://www.microsoft.com/en-us/download/details.aspx?id=13255
Но до сих пор нет радости.
Затем я запустил код ниже в PowerShell (с сайта SQL Panda http://goo.gl/A3Hu96)
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
... который дал мне этот результат (я сократил другие источники данных для краткости)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Как вы можете видеть, у меня есть Microsoft.ACE.OLEDB. 15.0 (пятнадцать) не Microsoft.ACE.OLEDB. 12.0 (двенадцать)
Итак, я поменял мою строку подключения на 15 и работал.
Итак, быстрый фрагмент PowerShell, чтобы продемонстрировать, как программировать версию...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
изменен, чтобы выбрать последнюю версию ACE, если более одного
Надеюсь, кто-нибудь, кто найдет это, теперь может проверить, какая версия OLEDB установлена и использовать соответствующий номер версии.
Если вы используете 64-битную, но все еще имеющую проблему даже после установки AccessDatabaseEngine, см. этот пост, она решила проблему для меня.
то есть. Вам нужно установить этот AccessDatabaseEngine
Вам нужно изменить платформу решений с "Любой процессор" на "x86" или "x64" на основе битности офисной установки.
Этапы приведены ниже:
Щелкните правой кнопкой мыши файл решения в обозревателе решений:
Нажмите "Активная платформа", если x86 уже существует, выберите это, а затем нажмите "Создать".
Выберите x86 или x64 из раскрывающегося списка новой платформы:
Скомпилируйте и запустите приложение.
Если вы отлаживаете веб-проект, убедитесь, что IIS Express работает либо на 32, либо на 64 бита в зависимости от настроек вашего проекта.
Перейти к
Инструменты > Параметры > Проекты и решения > Веб-проекты
и оттуда отметьте (или снимите флажок) "Использовать 64-битную версию IIS Express..."
syp_dino,
Решение для меня, как вы предложили для поставщика "Microsoft.ACE.OLEDB.12.0", не зарегистрировано на локальном компьютере. ошибка заключается в том, чтобы изменить активную платформу решения с любого "процессора", на "x86".
Когда я выполнил эти шаги, перестроил решение, захватил EXE и разместил его в сети, все работало гладко на 64-битной машине Windows 7.
Если установленный "AccessDatabaseEngine" по-прежнему не помогает, ниже приведено решение:
Вам нужно изменить платформу активного решения с "Любой процессор" на "x86".
Поставщик OLEDB не зарегистрирован на локальном компьютере
Из CodeProject.com
Сначала проверьте, какая версия microsoft.ace.oledb.12.0 установлена в вашей системе.
Проверьте ниже путь C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL -64 бит установлен
Проверьте ниже путь C:\Program Files (x86)\Общие файлы \Microsoft Shared\OFFICE14\ACEOLEDB.DLL - бит xx установлен
Если (x86) установлен, то с помощью платформы решения для изменения конфигурации для x86, для x64 измените на x64.
Если это невозможно, установите с помощью ссылки ниже
https://www.microsoft.com/en-us/download/details.aspx?id=23734
У меня возникла эта проблема при попытке импортировать данные из файла excel (xlsx) в базу данных SQL Server с помощью SSMS 2014.
Драйвер системы Office 2007: компоненты подключения к данным установили для меня трюк.
Просто загрузите и установите следующий механизм доступа к базе данных (X86 или X64: в соответствии с конфигурацией вашего компьютера) и см. волшебство:)
https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
Мне удалось исправить это, выполнив шаги в этой статье: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine
Ключевым моментом для меня было следующее:
При отладке с помощью IIS
по умолчанию Visual Studio использует 32-разрядную версию. Вы можете изменить это из Visual Studio, выбрав "Инструменты" "Опции" Проекты и Решения "Веб-проекты" Общие и выбор
"Используйте 64-битную версию IIS Express для веб-сайтов и проектов"
После проверки этого параметра, после чего целевая платформа платформы моего проекта вернется к "Any CPU" (я установил ее на x86 где-то в процессе устранения неполадок), я смог преодолеть эту ошибку.
У меня такая же проблема, когда мы читаем файл Excel.
История проблемы:
Недавно мы перенесли наше приложение с 32-разрядной до 64-разрядной из-за потребности в памяти. Для этого мы перенесли наши окна 7 с 32-битного на 64-битный. Но мы все же установили 32-разрядный офис на наших машинах.
потому что у нас возникла эта проблема при импорте данных Excel в приложение.
Решение
Я загрузил 64-битную версию http://www.microsoft.com/en-us/download/details.aspx?id=13255 и установил с аргументом как,
AccessDatabaseEngine_x64.exe/passive
Без изменения кода моя проблема будет решена.
Примечание:
В 64-битной операционной системе и 64-битном офисе мои функции отлично работали без этого исправления. Это исправление требуется только в том случае, когда наше приложение работает в 64-разрядной версии на 64-разрядной ОС, на котором установлено 32-разрядное офисное устройство.
Если вы получаете эту ошибку при попытке использовать ACE из приложения ASP.NET, наиболее вероятной причиной является то, что вы установили либо одну из 32-разрядных версий. По умолчанию IIS в 64-разрядной операционной системе будет запускать приложения в 64-разрядном рабочем процессе. 64-разрядные процессы не могут загружать 32-разрядные библиотеки DLL. Когда вызов выполняется провайдером ACE, 64-битный процесс попытается найти 64-битную DLL. Если он не существует, вы получите сообщение об ошибке, которое привело вас сюда.
В этом случае у вас есть два варианта. Во-первых, вы можете установить 64-разрядную версию 2010 года. Если у вас установлена 32-разрядная версия 2007 года, вы можете просто установить 64-разрядную версию 2010 вместе с ней. Если у вас установлена 32-разрядная версия 2010 года, вам необходимо ее удалить и загрузить и установить 64-разрядную версию 2010. Вы не можете одновременно устанавливать 32- и 64-разрядные версии поставщика 2010 года. Если вы выполняете установку на вашей машине разработки, вы также можете быть ограничены битрейтом любых существующих установок Office.
Второй вариант - изменить пул приложений в IIS для включения 32-разрядных приложений. Если вы используете полную версию IIS, для этого вы можете использовать инструмент управления (Панель управления "Администрирование" Диспетчер служб IIS).
Подробнее см. ниже ссылка
У меня уже была установлена Microsoft Access Database Engine 2010 Redistributable, уже установленная на моем компьютере, но по-прежнему была получена ошибка Microsoft ACE OLEDB Provider.
Затем я вспомнил, что недавно обновился до Office 2016, поэтому я могу попробовать переустановить Microsoft Access Database Engine 2010 Redistributable. И это устранило проблему на моей машине.
Итак, если вы обновили до другой версии MS Office или даже отремонтировали/переустановили свой MS Office, попробуйте переустановить Microsoft Access Database Engine 2010 Redistributable, прежде чем тратить время на поиск других исправлений. Удачи!
У меня была такая же проблема, но в этом случае microsoft-ace-oledb-12-0-provider уже был установлен на моем компьютере и отлично работал для разработки другого приложения.
Разница между этими приложениями и тем, с которыми я столкнулся с проблемой, заключалась в том, что старые приложения выполнялись на " Local IIS", тогда как ошибка с ошибкой была " IIS Express (работает из Visual Studio). Так что я сделал -
- Щелкните правой кнопкой мыши на имени проекта.
- Перейдите в раздел Свойства
- Перейдите в веб-вкладку справа.
- Под серверами выберите Local IIS и нажмите кнопку "Создать виртуальный каталог".
- Запустите приложение еще раз, и он сработал.
Не забудьте установить AccessDatabaseEngine на сервер для веб-приложения.
1.) Проверьте строку подключения ConnectionStrings.com.
2.) Убедитесь, что установлен правильный механизм базы данных. Это были две базы данных, которые помогли мне.
Распространяемый Microsoft Access Database Engine 2010
2007 Драйвер системы Office: Компоненты подключения данных
3.) Может возникнуть проблема с вашей целевой платформой сборки: "Любой процессор", возможно, она должна быть "X86" ( "Свойства", "Сборка", "Платформа" ).
также можно попробовать выполнить следующие действия.
В SQL Server, 1. Откройте одну базу данных 2. Выберите в опции "Server Obtect" 3.Clic в 'Linked Servers' 4.Clic в "Провайдерах" 5.Clic Rigth в 'Microsoft.ACE.OLEDB.12.0' 6.Установите все параметры и закройте
Я следовал инструкциям других; установив этот патч, установив этот патч, а также Microsoft Access Database Engine 2010.
Моя проблема заключалась в том, что я использую одну и ту же библиотеку (linq2sql) на двух сайтах на моей машине; 1 работает, а 1 - нет.
В конце концов я обнаружил, что мне пришлось "включить 32-разрядные приложения" в расширенных настройках приложения для моего нерабочего сайта.
Теперь все работает отлично.
Я столкнулся с этой же проблемой. Перейдите в Свойства решения и измените любой процессор на x86, я думаю, что он выполнит эту работу.
Это сработало для меня прямо сейчас.
Но для вашего пакета приложений вы можете использовать любые следующие решения:
Или
Как я решил это на разных компьютерах:
У меня есть 32-разрядная машина Windows 7 с Visual Studio 2012, у которой не было базы данных Access, потому что у меня нет Office 2010. Я скопировал тот же источник, что и в моей 64-разрядной машине под Windows 7.
Итак, я установил AccessDatabaseEngine на эту 32-битную машину Windows 7 после загрузки ее в соответствии с приведенными выше предложениями от других, и все было хорошо.
У меня все еще была проблема с моей 64-разрядной машиной с Windows 7, у которой уже есть Office 2010, который уже включает Access 2010. Как я решил на этом компьютере, я перешел в PROJECT, выбранные свойства и на платформе Target был настроен любой CPU Я проверил Prefer 32-bit. Recompiled/Build и поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован в сообщении локальной машины.
Я получил эту ошибку при импорте данных из файла Excel в MS-SQL. Поставщик уже был установлен (64-разрядный), и это меня удивило, почему это не сработало. Итак, все, что я сделал, это найти приложение импорта/экспорта, используемое здесь, то есть .EXE. И я нашел его в
C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe
Затем я запустил .exe напрямую, чтобы выполнить импорт данных. И это сработало!
Это зависит от того, где вы установили офис, если у вас есть x64-разрядный офис, тогда вы должны скомпилировать приложение как x64, чтобы он мог запускаться, поэтому, если вы хотите, чтобы он запускался на x36, вы должны установить офис x86 для принятия, я пробовал все решения выше, но никто не работал до тех пор, пока я не понял, что у меня был офис x64bit, и поэтому я построил приложение как x64 и работал
//Чтение файла .xls
string strConnection = "";<br/>
string FileName = Server.MapPath("Student.xls");
strConnection = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0; HDR=Yes;IMEX=1;'";<br/>
try
{
OleDbConnection conn1 = new OleDbConnection(strConnection);
conn1.Open();
DataTable dt = new DataTable();
dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
Object sheetName = dt.Rows[0]["TABLE_NAME"];
dt.Clear();
dt.Columns.Clear();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
da.TableMappings.Add("Table", "0");
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
string ID = dt.Rows[i][0].ToString();
string Name = dt.Rows[i][1].ToString();
string City = dt.Rows[i][2].ToString();
string Marks = dt.Rows[i][3].ToString();
}
conn1.Close();
}
catch
{
throw;
}
//To Read xlsx file use following code
string strConnection = ""; <br/>
string FileName = Server.MapPath("Student.xlsx"); <br/>
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0 Xml;HDR={1};IMEX=1;'";<br/>
try
{
OleDbConnection conn1 = new OleDbConnection(strConnection);
conn1.Open();
DataTable dt = new DataTable();
dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
Object sheetName = dt.Rows[0]["TABLE_NAME"];
dt.Clear();
dt.Columns.Clear();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
da.TableMappings.Add("Table", "0");
da.Fill(dt);
//int idx=0;
//int j=0;
for (int i = 0; i < dt.Rows.Count; i++)
{
string ID = dt.Rows[i][0].ToString();
string Name = dt.Rows[i][1].ToString();
string City = dt.Rows[i][2].ToString();
string Marks = dt.Rows[i][3].ToString();
}
conn1.Close();
}
catch
{
throw;
}
//Теперь установите AccessDatabaseEngine.exe из раздела http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734
Он будет работать на 100%