Il provider Microsoft.ACE.OLEDB.12.0 non è registrato

Ho una soluzione di Visual Studio 2008 con due progetti (un progetto di modelli di Word e un’applicazione di console VB.Net per il test). Entrambi i progetti fanno riferimento a un progetto di database che apre una connessione a un file di database MS-Access 2007 e contiene riferimenti a System.Data.OleDb. Nel progetto di database ho una funzione che recupera una tabella di dati come segue

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 

Quando chiamo questa funzione dal mio progetto Word 2007 Template, tutto funziona correttamente; nessun errore. Ma quando lo eseguo dall’applicazione console getta la seguente eccezione

ex = {“Il provider ‘Microsoft.ACE.OLEDB.12.0’ non è registrato sul computer locale.”}

Entrambi i progetti hanno lo stesso riferimento e l’applicazione della console ha funzionato quando l’ho scritta per la prima volta (qualche tempo fa) ma ora ha smesso di funzionare. Devo mancare qualcosa ma non so cosa. Qualche idea?

Ho un programma Visual Basic con Visual Studio 2008 che utilizza un database Access 2007 e stava ricevendo lo stesso errore. Ho trovato alcuni thread che consigliavano di modificare la configurazione di compilazione avanzata su x86 trovata nelle proprietà dei programmi se si sta utilizzando un sistema a 64 bit. Finora non ho avuto problemi con il mio programma da allora.

In sostanza, se ci si trova su un computer a 64 bit, IIS 7 non è (per impostazione predefinita) per le app a 32 bit, su cui funziona il motore di database. Quindi ecco esattamente quello che fai:

1) assicurati che il motore di database 2007 sia installato, questo può essere scaricato all’indirizzo: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) aprire il gestore IIS7 e aprire l’area Pool di applicazioni. Nella barra laterale destra, verrà visualizzata l’opzione “Imposta i valori predefiniti del pool di applicazioni”. Fare clic e verrà visualizzata una finestra con le opzioni.

3) il secondo campo in basso, che dice ‘Abilita applicazioni a 32 bit’ è probabilmente impostato su FALSE per impostazione predefinita. Basta fare clic su dove dice “falso” per cambiarlo in “vero”.

4) Riavvia il tuo pool di app (puoi farlo premendo RECYCLE invece di STOP poi START, che funzionerà anche).

5) fatto, e il tuo messaggio di errore andrà via.

Stai utilizzando un sistema a 64 bit con il database in esecuzione a 32 bit ma la console in esecuzione a 64 bit? Non ci sono driver MS Access che eseguono 64 bit e segnalerebbero un errore identico a quello che hai segnalato.


Soluzione:

Questo è tutto! Grazie Arjun Paudel per il link. Ecco la soluzione trovata su XNA Creator’s Club Online. È di Stephen Styrchak.

Il seguente errore mi suggerisce di credere che stai compilando per 64 bit:

Il provider “Microsoft .ACE.OELDB.12.0” non è registrato sul computer locale

Non ho l’Express Edition ma seguo i passaggi validi nel 2008 express?

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
– Arjun Paudel


In VC# Express , questa proprietà è mancante, ma è comunque ansible creare una configurazione x86 se si sa dove cercare.

Sembra una lunga lista di passaggi, ma una volta che sai dove sono queste cose è molto più facile. Chiunque abbia solo VC# Express probabilmente lo troverà utile. Una volta che sai di Configuration Manager , sarà molto più intuitivo la prossima volta.

1.In VC # Express 2005, vai su Tools -> Options .
2. Nell’angolo in basso a sinistra della finestra di dialogo Opzioni, selezionare la casella "Show all settings" .
3. Nella vista ad albero sul lato sinistro, selezionare "Projects and Solutions" .
4. Nelle opzioni a destra, seleziona la casella "Show advanced build configuraions."
5. Fare OK su OK .
6. Vai a Build -> Configuration Manager
7.Nella colonna Piattaforma accanto al progetto, fai clic sulla casella combinata e seleziona "" .
8.Nell’impostazione "New platform" setting, choose "x86" .
9. Fare OK su OK .
10. Fare clic su Close .
Lì, ora hai una configurazione x86! Facile come torta! 🙂

Raccomando anche l’uso di Configuration Manager per eliminare la piattaforma Any CPU. Davvero non lo vuoi se hai mai depedenze su DLL native a 32 bit (anche dipendenze indirette).

Stephen Styrchak | Sviluppatore XNA Game Studio http://forums.xna.com/forums/p/4377/22601.aspx#22601


Ho pensato di farmi sentire perché ho trovato questa domanda di fronte a un contesto leggermente diverso del problema e ho pensato che potesse aiutare altre anime tormentate nel futuro:

Ho avuto un’applicazione ASP.NET ospitata su IIS 7.0 in esecuzione su Windows Server 2008 a 64 bit.

Dato che IIS ha il controllo del testimone del processo, la soluzione nel mio caso era impostare l’impostazione Enable32bitAppOnWin64 su true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip- 2-you-can-ora-32-bit-e-64-bit-applicazioni-on-the-same-run-server.aspx

Funziona in modo leggermente diverso in IIS 6.0 (Non è ansible impostare Enable32bitAppOnWin64 a livello del pool di applicazioni) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx? mfr = true

Sto avendo lo stesso problema. Cerco di installare Office 2010 64 bit su Windows 7 a 64 bit e quindi installare Office System Driver 2007: componenti di connettività dati.

successivamente, Visual Studio 2008 può aprire una connessione a un file di database MS-Access 2007.

Vedi il mio post su un thread simile di Stack Exchange https://stackoverflow.com/a/21455677/1368849

Avevo la versione 15, non la 12 installata, che ho scoperto eseguendo questo codice PowerShell …

 (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 

… che mi ha dato questo risultato (ho rimosso altre fonti di dati per brevità) …

 SOURCES_NAME SOURCES_DESCRIPTION ------------ ------------------- Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider 

Ho lo stesso errore su una famiglia Windows Vista 64bit completamente aggiornata con un’applicazione .NET che ho compilato solo a 32 bit – il programma è installato nella cartella programx86 su macchine a 64 bit. Fallisce con questo messaggio di errore anche con il provider di database di accesso 2007 installato, con / senza SP2 dello stesso installato, installato IIS e set di pool di app per il supporto dell’app 32 bit … sì Ho provato ogni soluzione ovunque e ancora senza successo.

Ho cambiato la mia app in ACE OLE DB.12.0 perché JET4.0 non funzionava su macchine a 64 bit – e non è migliore: – / Il thread più promettente che ho trovato è stato questo:

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

ma quando si tenta di installare il “Driver di sistema Office 2010 Beta: componenti di connettività dati” a 64 bit, viene indicato che non è ansible installare la versione a 64 bit senza disinstallare tutte le applicazioni a 32 bit per ufficio e installare la versione a 32 bit del 2010 Driver di sistema Office Beta: i componenti di connettività dati non risolvono il problema iniziale, anche con “Microsoft.ACE.OLEDB.12.0” come provider anziché “Microsoft.ACE.OLEDB.14.0” che quella pagina (e altre) consigliano.

Il mio prossimo tentativo sarà quello di seguire questo post:

Il problema è dovuto all’aroma errato di OLEDB32.DLL e OLEDB32r.DLL registrati sul server. Se le versioni a 64 bit sono registrate, devono essere annullate e quindi vengono registrate le versioni a 32 bit. Per risolvere questo problema, annullare la registrazione delle versioni situate in% Programmi% \ File comuni / Sistema / OLE DB. Quindi registrare le versioni nello stesso percorso ma nella directory% Program Files (x86)%.

Qualcun altro ha avuto così tanti problemi con entrambi i provider di ACE JET4.0 e OLEDB su macchine a 64 bit? Qualcuno ha trovato una soluzione se nessuno degli altri ha funzionato?

Presumo che se si sta eseguendo un sistema a 64 bit con un database a 32 bit e si sta tentando di eseguire una console a 64 bit, è necessario installare i seguenti pacchetti sulla macchina.

  1. Installa Microsoft Access Database Engine 2010 x86 Redistributable, questa installazione è disponibile all’indirizzo: http://www.microsoft.com/download/en/details.aspx?id=13255 .
  2. Componenti di Data Connectivity di Office 2007, questa installazione è disponibile all’indirizzo: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
  3. Motore di database Microsoft Access 2010 x64 ridistribuibile. Dovrai scaricare il pacchetto localmente ed eseguirlo con un flag passivo. È ansible scaricare l’installazione qui: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Installazione utilizzando il prompt dei comandi con il flag ‘/ passive’. Nel prompt dei comandi eseguire il seguente comando: ‘AccessDatabaseEngine_x64.exe / passivo’

Nota: l’ordine sembra essere importante, quindi se hai già installato qualcosa, disinstalla e segui i passaggi precedenti.