Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

По сути, если вы работаете на 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-битные приложения», вероятно, по умолчанию установлено в значение ЛОЖЬ.Просто щелкните там, где написано «ложь», чтобы изменить его на «истина».

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

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

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

<Ч>

Решение:

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

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

  

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

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

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

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

<Ч>

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

У меня было приложение 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- теперь можно запускать 32-битные и 64-битные приложения на одном сервере.aspx

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

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

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

См. мой пост в аналогичной теме 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

У меня такая же ошибка в полностью обновленной 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-разрядную версию бета-версии драйвера системы 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-битных машинах?Кто-нибудь нашел решение, если ни одно из остальных не работает?

Я предполагаю, что если вы используете 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'
  • Примечание. Похоже, порядок имеет значение - поэтому, если у вас уже есть что-либо, удалите его и выполните описанные выше действия.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top