Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован

У меня есть решение 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" провайдер не зарегистрирован на локальная машина. "}

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

Ответ 1

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

Ответ 2

В принципе, если вы работаете на 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. Просто нажмите, где он говорит "false", чтобы изменить его на "true".

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

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

Ответ 3

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

Ответ 4


Решение:

Что это! Спасибо Арджуну Пауделю за ссылку. Здесь решение найдено в XNA Creator 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. В VС# Express 2005 перейдите к Tools -> Options.
2. В нижнем левом углу диалогового окна "Параметры" установите флажок ""Show all settings"".
3. В дереве с левой стороны выберите "Projects and Solutions".
4. В параметрах справа установите флажок, "Show advanced build configuraions."
5.Щелкните OK.
6.Go до Build -> Configuration Manager...
7. В столбце Платформа рядом с вашим проектом щелкните поле со списком и выберите "<New...>".
8. В "New platform" setting, choose "x86".
9.Щелкните OK.
10.Щелкните Close.
Теперь у вас есть x86-конфигурация! Проще простого!: -)

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

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


Ответ 5

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

У меня было приложение 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

Ответ 6

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

после этого, visual studio 2008 может открыть подключение к файлу базы данных MS-Access 2007.

Ответ 7

См. мой пост в аналогичном потоке обмена стеками fooobar.com/questions/27530/...

У меня была версия 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

Ответ 8

У меня такая же ошибка на полностью обновленной версии Windows Vista Family 64bit с .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-битную "Систему драйверов системы Office для Office 2010", она сообщает вам, что вы не можете установить 64-разрядную версию без удаления всех 32-разрядных офисных приложений... и установки 32-битного версия брандмауэра системы Office 2010: Компоненты подключения к данным не решают начальную проблему, даже с "Microsoft.ACE.OLEDB.12.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-битных машинах? Кто-нибудь нашел решение, если никто из других не работает?

Ответ 9

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

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

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