Il Provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale - come risolvere Come risolvere un problema che impedisce a una applicazione ASP.NET installata su Windows Server e IIS di accedere a Database Access o di altro tipo utilizzando il provider Microsoft JET.

Il Provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale - come risolvere

Se vi siete imbattuti in questo articolo è probabile che, per vostra sfortuna, siate ancora oggi alle prese con vecchi(ssimi) applicativi web che necessitano di effettuare connessioni a Database Access mediante la ormai vetusta tecnologia Microsoft JET.

Il messaggio di errore con cui probabilmente avete a che fare è dunque con tutta probabilità il seguente:

Il Provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale

Prima di addentrarci nell'analisi del problema e identificare le possibili soluzioni, è opportuno chiarire cos'è Microsoft Jet e come mai ne abbiamo bisogno, così da inquadrare il messaggio di errore nel suo contesto e comprenderlo nel migliore dei modi.

Introduzione

Per chi non sapesse di cosa stiamo parlando: il Microsoft Jet Database Engine è un motore di database su cui sono stati costruiti diversi prodotti Microsoft.  La prima versione di Jet è stata sviluppata nel 1992: il nome del motore è l'acronimo di Joint Engine Technology ed è stato a lungo il motore predefinito di numerosi applicativi Microsoft, tra cui Visual Basic e, soprattutto, Microsoft Access. L'enorme diffusione della suite Office e dei Database Access avvenuta nel corso degli anni '90 e 2000 ha contribuito a mantenere Jet vivo e vegeto come motore di connessione a Database di tipo Access, a dispetto della nascita delle numerose alternative più efficienti rilasciate da Microsoft negli anni a venire, come Microsoft Desktop Engine (MSDE) e SQL Server: la sopravvivenza di Jet si deve dunque principalmente alla sua capacità di effettuare connessioni ODBC, realizzate attraverso le API OLE DB di Microsoft.

Grazie a questa importante funzionalità, negli ultimi 20 anni, Jet è diventato praticamente un sinonimo di Microsoft Access: il suo utilizzo è infatti quasi sempre legato alla necessità di doversi connettere a uno o più file di tipo Access / .mdb.

Il Problema

Al netto delle informazioni raccolte nel paragrafo precedente, la causa del nostro problema sembrerebbe essere ovvia, così come la soluzione: poiché il messaggio di errore è chiaramento dovuto al fatto che il driver Microsoft Jet non sono presenti nel sistema, procedere alla loro installazione dovrebbe essere sufficiente.

Sfortunatamente, questo è vero soltanto nel caso in cui il nostro sistema sia ancora basato su architettura a 32-bit: se vi trovate in questa situazione, potete procedere all'installazione di Microsoft Jet 4.0 Service Pack 8 scaricando l'installer da questa pagina: è molto probabile che, così facendo, risolverete il vostro problema senza bisogno di continuare con la lettura di questo articolo. Viceversa, nel caso in cui il vostro sistema sia a 64-bit, le cose potrebbero non essere così semplici, per i motivi che proveremo a spiegare di seguito.

Poiché Microsoft Jet è stato sviluppato nei primi anni '90 e formalmente abbandonato da Microsoft di lì a poco, il prodotto - sviluppato per sistemi a 32-bit - è diventato incompatibile con le più recenti architetture a 64 bit: per questo motivo, conseguentemente all'affermarsi dei nuovi sistemi Windows Server e alla necessità di utilizzarlo con sistemi basati su processori x64, Jet ha provocato non pochi mal di testa agli sfortunati sviluppatori software, sistemisti e amministratori di sistema che si sono trovati a dover gestire l'accesso a vecchi applicativi e/o archivi basati su MS Access.

Il problema di come utilizzare Microsoft Jet su sistemi a 64-bit è risolvibile attraverso diversi workaround, tutti più o meno riassunti in questa pagina informativa del sito ConnectionStrings.com: nei paragrafi successivi ci dedicheremo ad approfondire i due più utilizzati e che risultano maggiormente efficaci.

Workaround #1: Forzare la modalità a 32-Bit

Tra i molti possibili workaround, il più diffuso è sempre stato quello di compilare gli applicativi a 32-bit, così da garantirne la compatibilità con l'arcaico motore - per il quale, come spiega Microsoft in questo articolo della KB, "non esiste una versione a 64 bit".

Ovviamente, nel caso delle applicazioni web, questo workaround risulta particolarmente fastidioso perché occorre anche fare in modo che IIS - anch'esso ormai da anni disponibile in modalità 64 bit nativa - possa eseguire l'Application Pool in modalità 32-bit. Per ottenere questa configurazione, è necessario compiere i seguenti passaggi:

  • Aprire IIS Manager
  • Navigare all'interno del Pool di Applicazioni.
  • Fare click sull'Application Pool relativo all'applicazione che necessita di utilizzare Jet (se non sapete qual è, potete scoprirlo facilmente dando un'occhiata alle proprietà dell'applicazione stessa), quindi selezionare Impostazioni avanzate.
  • Individuate l'opzione "Consenti applicazioni a 32 bit" e impostarla a True.

Workaround #2: Sostituire Jet con Microsoft ACE

Un workaround decisamente migliore è quello che prevede la sostituzione di Jet con Microsoft ACE, un driver OLE DB più moderno del precedente e disponibile anche in versione 64-bit. La versione più "compatibile" ad oggi disponibile, denominata Microsoft ACE OLEDB 12.0 Driver, è contenuta all'interno del pacchetto Microsoft Access Database Engine 2010, scaricabile gratuitamente - in versione x86 e x64 - dal seguente link ufficiale Microsoft:

A partire dall'uscita di Office 2013 è possibile anche una versione più recente, denominata Microsoft ACE OLEDB 15.0 Driver e contenuta all'interno del pacchetto Microsoft Access Runtime 2013, anch'esso scaricabile gratuitamente in versione x86 e x64:

Analogamente, con l'uscita di Office 2016, la versione di ACE è stata ulteriormente aggiornata a 16.0 e resa disponibile all'interno del pacchetto Microsoft Access Runtime 2013, anch'esso scaricabile gratuitamente in versione x86 e x64:

Le versioni 2013 e 2016, benché più moderne e performanti, potrebbero presentare dei problemi di compatibilità con alcuni DB Access non di ultima generazione: per questo motivo, la versione per Office 2010 (ACE OLEDB 12.0) risulta a tutt'oggi la release maggiormente consigliata da installare sui server di sviluppo e di produzione.

Si badi che, per via di una limitazione inserita da Microsoft all'interno dei pacchetti di installazione, il sistema non consente di installare la versione a 64-bit di ACE se la versione a 32-bit risulta già presente (e viceversa); per lo stesso motivo, il sistema non consente di installare la versione a 32-bit su un sistema operativo a 64-bit (e viceversa). Entrambe queste limitazioni possono tuttavia essere aggirate eseguendo l'installer da command-line e specificando l'opzione /passive nel seguente modo:

A prescindere dalla possibilità di aggirare le suddette limitazioni, nella maggior parte dei casi è sufficiente limitarsi ad installare la versione a 64-bit, dando per scontato che la propria applicazione (e Pool di Applicazioni di IIS, nel caso di applicazioni web) giri a 64-bit.

Connection String per Microsoft.ACE

Nel caso in cui si voglia sostituire Microsoft Jet con ACE, sarà ovviamente necessario - subito dopo aver installato il driver - modificare la Connection String della nostra applicazione.

Ad esempio, la seguente Connection String relativa a Microsoft Jet:

Dovrà essere così modificata per consentire l'accesso tramite Microsoft.Ace:

Come si può vedere, la sintassi resta sostanzialmente invariata: l'unica cosa che cambia è l'identificativo del provider, che passa da Microsoft.Jet.OLEDB.4.0Microsoft.ace.OLEDB.12.0. Ovviamente, nel caso in cui vogliate provare a utilizzare le versioni per Office 2013 o 2016, dovrete utilizzare l'identificativo Microsoft.ace.OLEDB.15.0 o Microsoft.ace.OLEDB.16.0.

Conclusioni

Anche per questa volta è tutto: ci auguriamo che questo approfondimento possa risolvere i problemi degli amministratori di sistema che hanno necessità di connettersi tramite ODBC a uno o più database Access.

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.