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

One Comment on “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.

  1. Ottimo! Applicando la correzione ovvero abilitando le applicazioni a 32Bit su DefaultAppPool il problema si è risolto!

    Grazie.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

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