Il provider Microsoft.Jet.OLEDB.4.0 'non è registrato sul computer locale


191

Ho creato un'applicazione Windows sviluppata in .NET 3.5 in un server Windows 2008 a 32 bit. Quando viene distribuita l'applicazione in un server a 64 bit, viene visualizzato l'errore "Il provider Microsoft.Jet.OLEDB.4.0 'non è registrato sul computer locale".

Quindi, come soluzione a questo problema, ho modificato la proprietà build del progetto in X86, in modo che si costruisca in modalità 32 bit e ricostruisca il progetto nella macchina a 32 bit. Tuttavia, lo stesso progetto utilizza altri driver DB (DB2, SQL ecc.) Per connettersi ad altri database. Quindi, quando ho distribuito nuovamente la mia app nel sistema operativo a 64 bit, viene generata l'eccezione "Tentativo di caricare un assembly a 64 bit su una piattaforma a 32 bit".

Sto usando il driver Microsoft.Jet.OLEDB.4.0 per leggere e scrivere in Excel (.xls)

Risposte:


239

Ho trovato una soluzione per questo problema. Il problema che ho descritto nella mia domanda si è verificato sostanzialmente a causa dell'incompatibilità del driver Microsoft.Jet.OLEDB.4.0 nel sistema operativo a 64 bit.

Quindi, se stiamo usando il driver Microsoft.Jet.OLEDB.4.0 in un server a 64 bit, dobbiamo forzare la nostra applicazione a compilare in modalità 32 bit (Questa è la risposta che ho trovato quando ho fatto una ricerca approfondita per questo problema noto ) e questo provoca l'interruzione dell'altra parte del mio codice.

Fortunatamente, ora Microsoft ha rilasciato un driver di Office System 2010 compatibile a 64 bit che può essere utilizzato in sostituzione del tradizionale driver Microsoft.Jet.OLEDB.4.0. Funziona sia su server a 32 bit che a 64 bit. L'ho usato per la manipolazione di file Excel e ha funzionato bene per me in entrambi gli ambienti.Ma questo driver è in beta .

È possibile scaricare questo driver dal motore di database di Microsoft Access 2010 ridistribuibile


6
Presta particolare attenzione alle istruzioni su quel link :)
Segna il

4
Ho avuto lo stesso problema. Ho cambiato la configurazione dell'applicazione in x86, quindi ha funzionato!
skpaul,

9
inoltre ho dovuto cambiare la stringa di connessione dall'uso di Microsoft.Jet.OLEDB.4.0 a Microsoft.ACE.OLEDB.12.0
Spikolynn,

16
Sì, sebbene sia disponibile un motore di database di Access compatibile a 64 bit, è necessario che sul sistema non sia già installata una versione a 32 bit dei prodotti MS Office (ad esempio MS Word a 32 bit), il che rappresenta un grosso problema. Per risolvere il problema, utilizzare la versione a 32 bit di Access Database Engine 2010 e forzare l'esecuzione dell'applicazione .NET in modalità a 32 bit (ad esempio selezionando la piattaforma x86 in Configuration Manager). E la soluzione corretta è sostituire MS Access con un'alternativa migliore.
Massood Khaari,

3
domanda noob: posso distribuire questo driver come "all'interno della mia applicazione" o ogni utente che desidera utilizzare la mia applicazione deve installarlo manualmente?
philx_x,

117

Se il problema persiste in ASP.NET, tutto quello che dovevo fare era cambiare l'impostazione "Abilita applicazioni a 32 bit" su True, nelle Impostazioni avanzate per il pool di applicazioni.


Stavo usando ODBC a 64 bit e questa modifica ha iniziato a darmi un errore del database. L'ho corretto però. Nel caso in cui qualcuno incontri anche questo, dovrai installare i driver ODBC a 32 bit e quindi creare il tuo DSN in quello.
Farhan Hafeez,

2
È del tutto possibile farlo completamente nel codice a 64 bit ora. Installa il ridistribuibile collegato nella risposta di neo , quindi usa la stringa del provider suggerita nella risposta di Iqbal . Quindi vota entrambe le risposte. Questo è tutto!
Roman Starkov,

Ciò ha risolto il problema per me su Windows Server 2008 R2 dopo aver installato Redist Engine DB Access Access a 32 bit .
Chris Pickford,

2
Il rovescio della medaglia è che il pool verrà eseguito in modalità a 32 bit. Passeremo invece ad ACE per evitarlo.
wtjones,

ha funzionato anche per me con Windows Form. nessun codice ASP.NET
philx_x

53

Ho lo stesso problema

Il provider Microsoft.Jet.OLEDB.4.0 'non è registrato sul computer locale

Ho applicato la risposta di Neo ma non ha funzionato fino a quando non ho cambiato il provider in "Provider = Microsoft.ACE.OLEDB.12.0;" nella stringa di connessione.

Spero che questo possa aiutare se qualcuno affronta lo stesso problema.


4
Questo è! Per un server a 64 bit, installa il ridistribuibile collegato da neo (la variante a 64 bit, ovviamente), quindi cambia il provider come specificato in questa risposta, quindi funzionerà.
Roman Starkov,

Hai ragione Romkyns. Ho già detto che ho applicato la soluzione neo, quindi cambia il provider. Ma grazie il tuo commento lo rende più chiaro. Grazie mille Romkyns
Iqbal,

sostituito Microsoft.Jet.OLEDB.4.0 con Microsoft.ACE.OLEDB.12.0; in app.config e tutto ha funzionato.
AVEbrahimi,

1
Ho scoperto che questo ha funzionato, pur limitando l'app a 32 bit non ha fatto alcuna differenza.
Ryan Lundy,

Nel mio caso: "Microsoft.ACE.OLEDB.12.0 non registrato", :(
César León,

29

So che sono domande piuttosto vecchie e molte persone hanno risposto. ma sto riassumendo le cose per capire:

Se l'estensione del file è xls e il sistema operativo è a 32 bit, solo tu puoi utilizzare " Microsoft.Jet.OLEDB.4.0". Microsoft non ha rilasciato la versione a 64 bit di questo driver.

Se l'estensione del file è xlsx o il sistema operativo è a 64 bit, è necessario utilizzare " Microsoft.ACE.OLEDB.12.0". L'applicazione compilata in modalità 32/64 bit non influisce sulla selezione del driver.

Installare sempre il driver Microsoft.ACE.OLEDB.12.0a 64 bit su OS 64 bit. Se hai già installato Office a 32 bit, devi eseguire il driver da cmd con / passive argomento. Questo trucco funziona solo fino a Office 2013, Microsoft ha interrotto questa soluzione alternativa da Office 2016 per i driver Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Scarica i driver Microsoft.ACE.OLEDB.12.0

private void ProcessFile(string path)
{
    string connString = string.Empty;

    if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
        connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}

Se l'applicazione viene compilata con il flag AnyCPU, cercherà i driver di accesso a 64 bit sul sistema operativo a 64 bit e i driver di accesso a 32 bit sul sistema operativo a 32 bit.


1
Grazie per la risposta, tuttavia, sto usando VS2015 su Windows 10 e sto usando X64. Quando ho modificato la configurazione del progetto da AnyCPU a X86, il problema è scomparso. Non ho dovuto installare alcun driver aggiuntivo.
NoChance,

@NoChance Penso che tu abbia già installato Office 64 bit sul tuo computer e contenga già i driver Microsoft.ACE.OLEDB.12.0.
Romil Kumar Jain,

Grazie per la tua risposta, ho solo Office 2007.
NoChance,

19

Ho lo stesso messaggio, ho una pagina web con do su Visual Studio 2010, ho letto un file.xls su quella pagina, nel mio progetto visual non ha alcun problema, quando l'ho messo sul mio IIS locale mi lanciava un 'Microsoft .Jet.OLEDB.4.0 "il provider non è registrato sul computer locale" , ho risolto il problema successivamente seguendo questi passaggi,

1.-Apri IIS
2.-Cambia l'appPool su Impostazioni avanzate
3.-true per abilitare l'applicazione a 32 bit.

e questo è tutto

ps. Ho modificato Configuration Manager in X86 su Active Solution Platform


Questo impone l'esecuzione dell'app in modalità a 32 bit. È necessario disattivare questa impostazione se si desidera essere in grado di evitare la barriera da 4 GB.
Brain2000,

18

Se l'applicazione viene eseguita su localIIS, è possibile risolvere questo problema abilitando le applicazioni a 32 bit nelle Impostazioni avanzate di AppPool

inserisci qui la descrizione dell'immagine


8

Ho avuto lo stesso problema. Ho cambiato la configurazione dell'applicazione in x86, quindi ha funzionato!


come modificare questa configurazione? Ho creato un progetto tipo sito Web
SHEKHAR SHETE,

7

Ho appena cambiato la mia proprietà del progetto in formato x64

Progetto ---> Proprietà ---> Build ---> Target Framework ---> X64


5

Abbiamo riscontrato questo problema nell'app desktop.

Ambiente di sviluppo: Windows 7 Ultimate - Provider .Net Framework 4.5 a 64 bit = Microsoft.Jet.OLEDB.4.0

È stato risolto cambiando il target della piattaforma in X86 da qualsiasi CPU. Proprietà del progetto >> Build >> Target piattaforma.

inserisci qui la descrizione dell'immagine


2

Ho riscontrato questo problema con la mia applicazione desktop (il provider 'Microsoft.Jet.OLEDB.4.0' non è registrato sul computer locale). Non avevo la possibilità di creare un'app a 32 bit. Sperando che ciò aiuti gli altri nella stessa situazione.

Ho fatto quanto segue e il problema è andato via:

  1. Installata la versione a 64 bit di Microsoft Access Database Engine 2010 ridistribuibile , come suggerito da neo

  2. Modificato il mio provider in Microsoft.ACE.OLEDB.12.0


2

Sebbene una soluzione più ottimale sia semplicemente ricompilare come suggerito sopra, ciò richiede l'accesso al codice sorgente. Nel mio caso, avevo solo il file .exe finito e ho dovuto usare questa soluzione. Utilizza CorFlags.exeda .Net SDK per modificare le caratteristiche di caricamento dell'applicazione.

  1. Scarica .Net Framework SDK (ho usato personalmente 3.5 , ma la versione utilizzata dovrebbe essere uguale o superiore a .Net richiesta per la tua applicazione.
  2. Durante l'installazione, tutto ciò che serve è CorLibs.exe, quindi basta controllare Strumenti di sviluppo di Windows .
  3. Dopo l'installazione, trova il tuo CorFlags.exe. Per la mia installazione di .Net Framework 3.5 SDK, è stato su C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Apri un prompt dei comandi e digita path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Hai finito! Ciò imposta i flag di partenza per il programma in modo che si avvii in modalità WOW64 a 32 bit e possa pertanto accedere a microsoft.jet.oledb.4.0.


1

Modifica delle impostazioni avanzate del pool di applicazioni Impostazioni IIS. Abilitare l'applicazione a 32 bit


1

Basta cambiare la proprietà in base alla macchina e tutti hanno fatto :-)

Progetto ---> Proprietà ---> Build ---> Target Framework ---> X64

o

Progetto ---> Proprietà ---> Build ---> Target Framework ---> X86


1

Ho cambiato la mia stringa di connessione da

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Origine dati = {0}; Persist Security Info = True; Jet OLEDB: Database Password =;", gisdbPath);

a questa:

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Origine dati = {0}; id utente = Admin; password =;", gisdbPath);

Funziona per me non ho mai richiesto la registrazione di Microsoft.Jet.OLEDB.4.0.


0

In effetti, non esiste una versione a 64 bit di Jet - e non è previsto (apparentemente) di produrne uno.

Potresti essere in grado di utilizzare il driver ACE a 64 bit: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • ma non ho idea di come funzionerebbe se dovessi tornare a Jet per le tue app a 32 bit.

Tuttavia, potresti essere in grado di passare il progetto a 32 bit nella versione Express (non ho provato e non ho più installato il 2008 in alcun modo)

Forse è il momento di eliminare completamente i database di Access, mordere il proiettile e optare per SQL Server invece?



0

Nelle versioni precedenti di IIS, non lo troverai Advance Settings, per consentire Enable 32-bit Applicationsdi eseguire i seguenti comandi:

cscript% SYSTEMDRIVE% \ inetpub \ adminscripts \ adsutil.vbs SET W3SVC / AppPools / Enable32bitAppOnWin64 1

e

% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -i

Riferimento: qui


0

Stavo ottenendo la stessa eccezione mentre eseguivo "SQL Server 2014 Import and Export Data (64-bit)" sul mio Windows 8.1.

Per risolvere il problema questo problema ho fatto quanto segue

ha iniziato l'importazione e l'esportazione di dati di SQL Server 2014 (a 32 bit) anziché a 64 bit e funziona per me. Non ho modificato alcuna impostazione IIS e non ho installato alcun software aggiuntivo.


0

So che ho questo problema ancora e ancora quando distribuisco la mia applicazione su un nuovo server perché sto usando questo driver per connettermi a un file Excel. Quindi ecco cosa sto facendo di recente.

C'è un Windows Server 2008 R2, installo i driver di Access per una macchina a 64 bit e mi sbarazzo di questo messaggio, il che mi rende molto felice di imbattermi in un altro.

Questo qui sotto funziona magnificamente sulla mia macchina di sviluppo, ma sul server mi dà un errore anche dopo aver installato gli ultimi driver ODBC, che penso sia questo il problema, ma è così che l'ho risolto.

private const string OledbProviderString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\OlsonWindows.xls;Extended Properties=\"Excel 8.0;HDR=YES\"";

Sostituisco con il nuovo provider come questo di seguito:

private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xlsx;Extended Properties='Excel 12.0;HDR=YES;';";

Ma mentre lo faccio, c'è una cosa che dovresti notare. L'uso dell'estensione del file .xlsx e della versione di Excel è 12.0.

Dopo aver visualizzato questo messaggio di errore Errore: "Impossibile trovare ISAM installabile" , decido di modificare le cose un po 'come di seguito:

private const string OledbProviderString =      @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xls;Extended Properties='Excel 8.0;HDR=YES;';"; 

e sì, ho finito con quella brutta cosa, ma qui ho ricevuto un altro messaggio Il motore di database di Microsoft Access non può aprire o scrivere nel file "time_zone". È già aperto esclusivamente da un altro utente o è necessaria l'autorizzazione per visualizzare e scrivere i suoi dati. il che mi dice che non sono lontano dal risolverlo.

Forse c'è un altro processo che ha aperto il file nel frattempo e tutto quello che devo fare è un riavvio e tutto inizierà a funzionare senza problemi come previsto.


0

vai su Start-> Esegui e digita cmd per avviare il Prompt dei comandi (disponibile anche da Start-> Programmi-> Accessori-> Prompt dei comandi)

digita cd .. e premi invio digita cd .. e premi invio di nuovo (continua fino a quando sul display non compare:>)

ora devi andare in una cartella speciale che potrebbe essere c: \ windows \ system32 o potrebbe essere c: \ winnt \ system32 o potrebbe essere c: \ windows \ sysWOW64 provare a digitare ciascuno di questi, ad esempio cd c: \ windows \ sysWOW64 (se dice Il sistema non riesce a trovare il percorso specificato, prova quello successivo) cd c: \ windows \ system32 cd c: \ winnt \ system32 quando uno di questi non causa un errore, ferma, hai trovato il cartella corretta.

ora è necessario registrare le DLL OLE DB 4.0 digitando questi comandi e premendo Invio dopo ognuna

regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll


-2

Non esiste un provider a 64 bit per Jet. Se si desidera supportare più origini DB, compreso Jet to Excel, è necessario che almeno quella parte dell'applicazione venga eseguita in un processo a 32 bit.

L'errore che ricevi quando compili per x86 è un po 'strano. In questo caso non riesco a vedere come faresti riferimento a assembly a 64 bit.


Anthony, come posso far funzionare solo una parte del progetto in modalità 32 bit? Tutte queste connessioni DB, incluso Excel, rientreranno in un unico progetto. Inoltre ho ricevuto l'errore in x86, quando provo a eseguirlo nel sistema operativo a 64 bit. Penso che ciò sia dovuto al fatto che il driver DB2 installato nel sistema operativo a 64 bit è una versione a 64 bit e quando viene referenziato dall'applicazione, configurata per funzionare in modalità a 32 bit, causa l'errore.
neo

Se suddividere il progetto in multipe exes è più una seccatura di quanto valga la pena, ti resta solo la compilazione a 32 bit. Per quanto riguarda il problema di DB2 dovresti cercare alcuni esperti di DB2 su questa forse un'altra domanda specifica di DB2. In genere cose come SQL Server installano provider a 32 e 64 bit su un computer a 64 bit.
AnthonyWJones,

Grazie Anthony per i tuoi commenti. Facendo molte ricerche su questo problema e dai tuoi commenti, quello che ho capito è, devo creare la parte del progetto che elabora il foglio Excel come progetto separato e lo compili in versione a 32 bit.
neo

3
Solo così la gente lo sa, A2010 avrà Jet a 64 bit.
David-W-Fenton,

Grazie David, il 2010 ha un driver a 64 bit
neo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.