Microsoft.ACE.OLEDB.12.0 провайдер не зарегистрирован - PullRequest
66 голосов
/ 27 октября 2008

У меня есть решение Visual Studio 2008 с двумя проектами (проект Word-Template и консольное приложение VB.Net для тестирования). Оба проекта ссылаются на проект базы данных, который открывает соединение с файлом базы данных MS-Access 2007 и имеют ссылки на System.Data.OleDb. В проекте базы данных у меня есть функция, которая извлекает таблицу данных следующим образом

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Когда я вызываю эту функцию из моего проекта Word 2007 Template, все работает отлично; ошибок нет. Но когда я запускаю его из консольного приложения, оно выдает следующее исключение

ex = {"Microsoft.ACE.OLEDB.12.0" провайдер не зарегистрирован на локальный компьютер. "}

Оба проекта имеют одинаковые ссылки, и консольное приложение работало, когда я впервые написал его (некоторое время назад), но теперь оно перестало работать. Я должен что-то упустить, но я не знаю что. Есть идеи?

Ответы [ 9 ]

53 голосов
/ 16 апреля 2010

По сути, если вы работаете на 64-битной машине, IIS 7 (по умолчанию) не обслуживает 32-битные приложения, на которых работает ядро ​​базы данных. Итак, вот что вы делаете:

1) убедитесь, что ядро ​​базы данных 2007 установлено, его можно скачать по адресу: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) откройте диспетчер IIS7 и откройте область Пулы приложений. На правой боковой панели вы увидите опцию «Установить значения по умолчанию для пула приложений». Нажмите на нее, и появится окно с параметрами.

3) второе поле внизу, которое говорит, что «Включить 32-битные приложения», вероятно, по умолчанию установлено в ЛОЖЬ. Просто щелкните там, где написано «false», чтобы изменить его на «true».

4) Перезапустите ваш пул приложений (вы можете сделать это, нажав RECYCLE вместо STOP, затем START, что также будет работать).

5) сделано, и ваше сообщение об ошибке исчезнет.

42 голосов
/ 26 января 2009

У меня есть программа Visual Basic с Visual Studio 2008, которая использует базу данных Access 2007 и получала ту же ошибку. Я нашел несколько потоков, которые советовали изменить расширенную конфигурацию компиляции на x86, которые можно найти в свойствах программ, если вы используете 64-битную систему. До сих пор у меня не было никаких проблем с моей программой с тех пор.

7 голосов
/ 27 октября 2008

Вы используете 64-битную систему с 32-битной базой данных, а 64-битная консоль? Драйверов MS Access, работающих под управлением 64-разрядных систем, нет, и они сообщали бы об ошибке, идентичной той, о которой вы сообщили.

5 голосов
/ 12 декабря 2009

Решение:

Вот и все! Спасибо Арджун Паудель за ссылку. Вот решение, которое можно найти на сайте XNA Creator's Club Online. Это Стивен Стырчак.

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

Поставщик «Microsoft .ACE.OELDB.12.0» не зарегистрирован на локальном компьютере

У меня нет экспресс-редакции, но действительны ли следующие шаги в экспресс-версии 2008?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Арджун Паудель


В VC# Express это свойство отсутствует, но вы все равно можете создать конфигурацию x86, если знаете, где искать.

Это выглядит как длинный список шагов, но как только вы узнаете, где эти вещи, это будет намного проще. Любой, у кого есть только VC# Express, наверняка найдет это полезным. Как только вы узнаете о Configuration Manager, в следующий раз он станет намного более интуитивным.

1.В VC # Express 2005 перейдите на Tools -> Options.
2. В левом нижнем углу диалогового окна «Параметры» установите флажок "Show all settings".
3.В виде дерева слева выберите "Projects and Solutions".
4.В опциях справа установите флажок "Show advanced build configuraions."
5.Щелкните OK.
6. Перейдите к Build -> Configuration Manager ...
7.В столбце «Платформа» рядом с вашим проектом нажмите на поле со списком и выберите "<New...>".
8. В "New platform" setting, choose "x86".
9.Щелкните OK.
10.Щелкните Close.
Теперь у вас есть конфигурация x86! Проще простого! : -)

Я также рекомендую использовать Configuration Manager для удаления платформы Any CPU. Вы действительно не хотите этого, если у вас когда-либо есть зависимости от 32-битных собственных DLL (даже косвенных зависимостей).

Стивен Стырчак | Разработчик XNA Game Studio http://forums.xna.com/forums/p/4377/22601.aspx#22601


3 голосов
/ 29 января 2010

Я подумал, что могу вмешаться, потому что я нашел этот вопрос, столкнувшись с несколько иным контекстом проблемы, и подумал, что это может помочь другим мучительным душам в будущем:

У меня было приложение ASP.NET, размещенное на IIS 7.0, работающее в 64-разрядной версии Windows Server 2008.

Поскольку IIS контролирует разрядность процесса, в моем случае решением было установить для параметра Enable32bitAppOnWin64 значение true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

В IIS 6.0 он работает немного по-другому (нельзя установить Enable32bitAppOnWin64 на уровне пула приложений) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

2 голосов
/ 30 января 2014

Смотрите мой пост в похожей теме обмена стека https://stackoverflow.com/a/21455677/1368849

У меня была установлена ​​версия 15, а не 12, которую я узнал, запустив этот код PowerShell ...

(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
2 голосов
/ 14 мая 2010

У меня такая же проблема. Я пытаюсь установить 64-разрядную версию Office 2010 на 64-разрядную версию Windows 7, а затем установить драйвер системы Office 2007: Компоненты подключения данных.

после этого Visual Studio 2008 может открыть соединение с файлом базы данных MS-Access 2007.

1 голос
/ 10 февраля 2016

Я предполагаю, что если вы используете 64-битную систему с 32-битной базой данных и пытаетесь запустить 64-битную консоль, на компьютере должны быть установлены следующие пакеты.

  1. Установка Microsoft Access Database Engine 2010 x86 Распространяемая, эта установка доступна по адресу: http://www.microsoft.com/download/en/details.aspx?id=13255.
  2. Компоненты подключения к данным Office 2007, эта установка можно купить в: http://www.microsoft.com/download/en/confirmation.aspx?id=23734.
  3. Microsoft Access Database Engine 2010 x64 Распространяется. Ты сможешь нужно скачать пакет локально и запустить его с пассивным флагом. Вы можете скачать установку здесь: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Установка с использованием командной строки с флагом / passive. в В командной строке выполните следующую команду: 'AccessDatabaseEngine_x64.exe / passive'

Примечание. Похоже, порядок имеет значение - поэтому, если у вас уже установлено что-либо, удалите его и выполните описанные выше шаги.

1 голос
/ 26 апреля 2010

У меня та же ошибка на полностью обновленной 64-битной Windows Vista Family с приложением .NET, которое я скомпилировал только для 32-битной версии - программа установлена ​​в папке programx86 на 64-битных компьютерах. Это сообщение об ошибке завершается с ошибкой даже при установленном поставщике базы данных доступа 2007, с / без SP2 того же самого установленного, установленного IIS и установленного пула приложений для поддержки 32-битных приложений ... да, я пробовал все решения везде и до сих пор безуспешно.

Я переключил свое приложение на ACE OLE DB.12.0, потому что JET4.0 не работал на 64-битных машинах - и это не лучше: - / Самый многообещающий поток, который я нашел, был таким:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

но когда вы пытаетесь установить 64-разрядную версию 2010 бета-версии драйвера системы Office: компоненты подключения к данным, она сообщает, что вы не можете установить 64-разрядную версию, не удалив все 32-разрядные офисные приложения ... и не установив 32-разрядную версия 2010 бета-версии драйвера системы Office: Компоненты подключения к данным не решают первоначальную проблему, даже если в качестве поставщика вместо Microsoft.ACE.OLEDB.14.0 указана «Microsoft.ACE.OLEDB.14.0», а эта страница (и другие) рекомендую.

Моя следующая попытка будет следовать этому посту:

Проблема связана с неправильной разновидностью OLEDB32.DLL и OLEDB32r.DLL, зарегистрированных на сервере. Если 64-битные версии зарегистрированы, они должны быть незарегистрированными, а затем вместо них зарегистрированы 32-битные версии. Чтобы это исправить, отмените регистрацию версий, расположенных в папке% Program Files% / Common Files / System / OLE DB. Затем зарегистрируйте версии по тому же пути, но в каталоге% Program Files (x86)%.

У кого-нибудь еще были такие проблемы с поставщиками JET4.0 и OLEDB ACE на 64-битных машинах? Кто-нибудь нашел решение, если никто из других не работает?

...