2008-10-26 3 views
66

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

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 проекта шаблона все работает отлично; нет ошибок. Но когда я запускаю его из консольного приложения, он бросает следующее исключение

ех = { «The„Microsoft.ACE.OLEDB.12.0“ поставщик не зарегистрирован на локальном компьютере .»}

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

+0

Im также сталкивается с той же проблемой. Можете ли вы, ребята, помочь мне? где я найду установщика поставщика доступа к базе данных 2007 года? – 2009-11-07 04:53:40

+0

см. -> http://stackoverflow.com/questions/6649363/ – Bernhard 2015-08-27 12:04:11

ответ

41

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

+4

Но для приложения asp.net это определяется IIS, поэтому ознакомьтесь с этой статьей: http://support.microsoft.com/kb/894435/en-us – devzero 2009-05-14 13:14:32

+5

У меня была такая же проблема на ASP Приложение .NET - запуск локального кода, но сбой на сервере. Необходимо установить драйвер системы Office 2007: компоненты подключения к данным: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en, затем необходимо было включить рабочий процесс (пул приложений) для веб-сайта, чтобы разрешить 32-разрядные приложения. – Keith 2010-12-06 22:02:32

+3

Это не помогает людям, которые не могут использовать x86. Существует версия ACE для 64-битного: http://goo.gl/Cxsf1, но вам нужно удалить Office 2003, потому что там есть проблемы с совместимостью. – Jordan 2011-08-18 14:06:21

7

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

+0

Да, я запускаю 64-битную XP, и это была именно проблема. Переключил целевой процессор в Advanced Compile Options на x86-bit приложение и все работает сейчас. Спасибо – Azim 2008-10-26 22:35:02

5

Решение:

Вот так! Спасибо Арджуну Пауделю за ссылку. Вот решение, найденное в 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
- Арджун Paudel


В 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.Go to 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


3

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

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

Поскольку IIS находится в управлении процессом разрядности, решение в моем случае было установить Enable32bitAppOnWin64 настройку истину: 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

52

В принципе, если вы на 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) сделано, и ваше сообщение об ошибке исчезнет.

1

У меня такая же ошибка для полностью обновленного семейства 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 2010 Beta: компоненты подключения к данным» она сообщает вам, что вы не можете установить 64-битную версию без удаления всех 32-разрядных офисных приложений ... и установки 32-разрядной версии 2010 Бета-версия системы Office: компоненты подключения к данным не решают начальную проблему, даже с помощью «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-битных машинах? Кто-нибудь нашел решение, если никто из других не работает?

2

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

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

2

См мой пост на аналогичной Stack Exchange, нити 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 
1

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

  1. УСТАНАВЛИВАЕТЕ Microsoft Access Database Engine 2010 x86 Redistributable , эта установка доступна по адресу: 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 '

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

Смежные вопросы