Dostawca Microsoft.Jet.OLEDB.4.0 'nie jest zarejestrowany na komputerze lokalnym


191

Stworzyłem aplikację systemu Windows opracowaną w .NET 3.5 na 32-bitowym serwerze z systemem Windows 2008. Po wdrożeniu aplikacji na 64-bitowym serwerze wyświetla błąd „Dostawca Microsoft.Jet.OLEDB.4.0” nie jest zarejestrowany na komputerze lokalnym ”.

Tak więc, jako rozwiązanie tego problemu, zmieniłem właściwość kompilacji projektu na X86, dzięki czemu będzie on budowany w trybie 32-bitowym i odbuduje projekt na maszynie 32-bitowej. Ale ten sam projekt używa innych sterowników DB (DB2, SQL itp.) Do łączenia się z innymi bazami danych. Więc kiedy ponownie wdrożyłem moją aplikację w 64-bitowym systemie operacyjnym, zgłasza wyjątek „Próbowano załadować 64-bitowy zestaw na platformie 32-bitowej”.

Korzystam ze sterownika Microsoft.Jet.OLEDB.4.0 do odczytu i zapisu w programie Excel (.xls)

Odpowiedzi:


239

Znalazłem rozwiązanie tego problemu. Problem opisany w moim pytaniu pojawił się zasadniczo z powodu niezgodności sterownika Microsoft.Jet.OLEDB.4.0 w 64-bitowym systemie operacyjnym.

Więc jeśli używamy sterownika Microsoft.Jet.OLEDB.4.0 na serwerze 64-bitowym, musimy zmusić naszą aplikację do wbudowania w trybie 32-bitowym (to odpowiedź znalazłem, gdy szukałem obszernie tego znanego problemu ) i to powoduje uszkodzenie innej części mojego kodu.

Na szczęście teraz Microsoft wydał 64-bitowy zgodny Office System Driver 2010, który może być używany jako zamiennik tradycyjnego sterownika Microsoft.Jet.OLEDB.4.0. Działa zarówno na serwerach 32-bitowych, jak i 64-bitowych. Użyłem go do manipulacji plikami Excel i działał dobrze dla mnie w obu środowiskach.Ale ten sterownik jest w wersji BETA .

Możesz pobrać ten sterownik z programu Microsoft Access Database Engine 2010 Redistributable


6
Zwróć także szczególną uwagę na instrukcje dotyczące tego linku :)
Mark

4
Miałem ten sam problem. Zmieniłem konfigurację aplikacji na x86, a potem zadziałało!
skpaul

9
także musiałem zmienić parametry połączenia z używania Microsoft.Jet.OLEDB.4.0 na Microsoft.ACE.OLEDB.12.0
Spikolynn

16
Tak, chociaż dostępny jest 64-bitowy zgodny silnik bazy danych Access, wymaga on, aby żadna 32-bitowa wersja produktów MS Office nie była już zainstalowana w systemie (np. 32-bitowy MS Word), co jest dużym problemem. Obejściem tego problemu jest użycie 32-bitowej wersji programu Access Database Engine 2010 i wymuszenie działania aplikacji .NET w trybie 32-bitowym (np. Poprzez wybranie platformy x86 w programie Configuration Manager). Właściwym rozwiązaniem jest zastąpienie MS Access lepszą alternatywą.
Massood Khaari,

2
pytanie noob: czy mogę rozpowszechniać ten sterownik jak w „mojej aplikacji”, czy też każdy użytkownik, który chce korzystać z mojej aplikacji, musi zainstalować go ręcznie?
philx_x

117

Jeśli problem występuje nadal w programie ASP.NET, wszystko, co musiałem zrobić, to zmienić ustawienie „Włącz aplikacje 32-bitowe” na True, w Ustawieniach zaawansowanych puli aplikacji.


Korzystałem z 64-bitowego ODBC i ta zmiana zaczęła powodować błąd bazy danych. Ale poprawiłem to. W przypadku, gdy ktoś też się z tym spotka, będziesz musiał zainstalować 32-bitowe sterowniki ODBC, a następnie utworzyć w nim DSN.
Farhan Hafeez

2
Jest to całkiem możliwe, aby zrobić to teraz całkowicie w kodzie 64-bitowym. Zainstaluj redystrybucyjny link w odpowiedzi neo , a następnie użyj łańcucha dostawcy sugerowanego w odpowiedzi Iqbal . Następnie głosuj na obie te odpowiedzi. Otóż ​​to!
Roman Starkov

To rozwiązało problem dla mnie w systemie Windows Server 2008 R2 po zainstalowaniu 32-bitowej wersji Access Engine Engine Redist .
Chris Pickford

2
Minusem jest to, że pula będzie działać w trybie 32-bitowym. Zamiast tego przejdziemy na ACE, aby tego uniknąć.
wtjones

pracował dla mnie również z Windows Forms. w ogóle brak kodu ASP.NET
philx_x

52

mam ten sam problem

Dostawca Microsoft.Jet.OLEDB.4.0 'nie jest zarejestrowany na komputerze lokalnym

Zastosowałem odpowiedź przez neo, ale nie zadziałała, dopóki nie zmieniłem dostawcy na „Provider = Microsoft.ACE.OLEDB.12.0;” w ciągu połączenia.

Mam nadzieję, że to pomoże, jeśli ktoś napotka ten sam problem.


4
To jest to! W przypadku serwera 64-bitowego zainstaluj pakiet redystrybucyjny połączony przez neo (oczywiście wariant 64-bitowy), a następnie zmień dostawcę zgodnie z opisem w tej odpowiedzi, a wtedy zadziała.
Roman Starkov

Masz rację, romkyns. Powiedziałem już, że zastosowałem rozwiązanie neo, a następnie zmieniam dostawcę. Ale dziękuję twój komentarz wyjaśnia. Wielkie dzięki romkyns
Iqbal

zastąpił Microsoft.Jet.OLEDB.4.0 Microsoft.ACE.OLEDB.12.0; w app.config i wszystko działało.
AVEbrahimi,

1
Przekonałem się, że to zadziałało, a ograniczenie aplikacji do wersji 32-bitowej nie miało żadnego znaczenia.
Ryan Lundy,

W moim przypadku: „Microsoft.ACE.OLEDB.12.0 niezarejestrowany”, :(
César León

29

Wiem, że to dość stare pytania i wiele osób odpowiedziało. ale podsumowuję rzeczy do zrozumienia:

Jeśli rozszerzenie pliku to xls, a system operacyjny to 32 bity, tylko Ty możesz użyć „ Microsoft.Jet.OLEDB.4.0”. Firma Microsoft nie wydała 64-bitowej wersji tego sterownika.

Jeśli rozszerzenie pliku to xlsx lub system operacyjny to 64 bity, musisz użyć „ Microsoft.ACE.OLEDB.12.0”. Aplikacja skompilowana w trybie 32/64 bitowym nie wpływa na wybór sterownika.

Zawsze instaluj 64-bitowy sterownik Microsoft.ACE.OLEDB.12.0w 64-bitowym systemie operacyjnym. Jeśli masz już zainstalowany pakiet Office 32-bitowy, musisz uruchomić sterownik z cmd z argumentem / passive. Ten hack działa tylko do Office 2013, Microsoft zatrzymał to obejście od Office 2016 dla sterowników Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Pobierz sterowniki 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\"";
}

Jeśli aplikacja jest skompilowana z flagą AnyCPU, będzie szukać 64-bitowych sterowników dostępu w 64-bitowym systemie operacyjnym i 32-bitowych sterowników dostępu w 32-bitowym systemie operacyjnym.


1
Dziękuję za odpowiedź, jednak używam VS2015 na Windows 10 i X64. Kiedy zmieniłem konfigurację projektu z AnyCPU na X86, problem zniknął. Nie musiałem instalować żadnych dodatkowych sterowników.
NoChance,

@NoChance Myślę, że masz już zainstalowany pakiet Office 64-bitowy na swoim komputerze i zawiera on już sterowniki Microsoft.ACE.OLEDB.12.0.
Romil Kumar Jain

Dzięki za odpowiedź, mam tylko pakiet Office 2007.
NoChance,

19

Mam tę samą wiadomość, mam stronę internetową z do na Visual Studio 2010, czytam plik.xls na tej stronie, w moim projekcie visual nie ma żadnego problemu, kiedy umieszczam go na moim lokalnym serwerze IIS, rzuć mi Microsoft .Jet.OLEDB.4.0 „dostawca nie jest zarejestrowany na komputerze lokalnym” , naprawiłem ten problem, wykonując następujące kroki,

1.-Otwórz IIS
2.-Zmień appPool w Ustawieniach zaawansowanych
3.-true, aby włączyć aplikację 32-bitową.

i to wszystko

ps. Zmieniłem Menedżera konfiguracji na X86 na Active Solution Platform


To zmusza aplikację do działania w trybie 32-bitowym. Potrzebujesz tego ustawienia, jeśli chcesz uniknąć bariery 4 GB.
Brain2000

18

Jeśli twoja aplikacja działa na localIIS, możesz rozwiązać ten problem, włączając 32-bitowe aplikacje w Ustawieniach zaawansowanych AppPool

wprowadź opis zdjęcia tutaj


8

Miałem ten sam problem. Zmieniłem konfigurację aplikacji na x86, a potem zadziałało!


jak zmienić tę konfigurację? Stworzyłem projekt typu strony internetowej
SHEKHAR SHETE

7

Właśnie zmieniłem swoją właściwość projektu na format x64

Projekt ---> Właściwości ---> Kompilacja ---> Target Framework ---> X64


5

Napotkaliśmy ten problem w aplikacji komputerowej.

Środowisko programistyczne: Windows 7 Ultimate - 64-bitowy .Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

Rozwiązano go, zmieniając docelową platformę na X86 z dowolnego procesora. Właściwości projektu >> Kompilacja >> Cel platformy.

wprowadź opis zdjęcia tutaj


2

Wystąpił ten problem z moją aplikacją komputerową (dostawca „Microsoft.Jet.OLEDB.4.0” nie jest zarejestrowany na komputerze lokalnym). Nie miałem opcji budowania jako aplikacja 32-bitowa. Mam nadzieję, że pomoże to innym w tej samej sytuacji.

Zrobiłem następujące i problem zniknął:

  1. Zainstalowano 64-bitową wersję programu Microsoft Access Database Engine 2010 Redistributable , zgodnie z sugestią neo

  2. Zmieniłem mojego dostawcę na Microsoft.ACE.OLEDB.12.0


2

Chociaż bardziej optymalnym rozwiązaniem jest po prostu rekompilacja, jak sugerowano powyżej, wymaga to dostępu do kodu źródłowego. W moim przypadku miałem tylko gotowy plik .exe i musiałem użyć tego rozwiązania. Korzysta CorFlags.exez .Net SDK, aby zmienić charakterystykę ładowania aplikacji.

  1. Pobierz .Net Framework SDK (ja osobiście korzystałem z wersji 3.5 , ale używana wersja powinna być zgodna z wymaganą wersją aplikacji .Net lub jej wyższą.
  2. Podczas instalacji wszystko czego potrzebujesz to CorLibs.exepo prostu sprawdź Narzędzia programistyczne systemu Windows .
  3. Po instalacji znajdź swój CorFlags.exe. W przypadku mojej instalacji zestawu .NET Framework 3.5 SDK było to C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Otwórz wiersz polecenia i wpisz path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Jesteś skończony! Ustawia to flagi początkowe dla twojego programu, tak aby uruchamiał się w 32-bitowym trybie WOW64, a zatem może uzyskać dostęp do microsoft.jet.oledb.4.0.


1

Zmień zaawansowane ustawienia puli aplikacji Ustawienia usług IIS. Włącz aplikację 32-bitową


1

Po prostu zmień właściwość w oparciu o swój komputer i wszystkie zrobiły :-)

Projekt ---> Właściwości ---> Kompilacja ---> Target Framework ---> X64

lub

Projekt ---> Właściwości ---> Kompilacja ---> Target Framework ---> X86


1

Zmieniłem ciąg połączenia z

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Źródło danych = {0}; Zachowaj informacje bezpieczeństwa = True; Jet OLEDB: Hasło bazy danych =;", gisdbPath);

do tego:

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Source Data = {0}; id użytkownika = Admin; hasło =;", gisdbPath);

Działa ode mnie nigdy nie poprosiłem o rejestrację Microsoft.Jet.OLEDB.4.0.


0

Rzeczywiście nie ma 64-bitowej wersji Jet - i nie ma (najwyraźniej) planów jej stworzenia.

Możesz być w stanie użyć 64-bitowego sterownika ACE: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • ale nie mam pojęcia, jak by to działało, gdybyś musiał wrócić do Jet dla swoich 32-bitowych aplikacji.

Jednak możesz być w stanie zmienić projekt na 32-bitowy w wersji Express (nie próbowałem i nie mam już zainstalowanego 2008 w żadnym smaku)

Może nadszedł czas, aby całkowicie zlikwidować dostęp do baz danych, ugryźć kulę i zamiast tego wybrać serwer SQL?



0

W starszych wersjach IIS nie znajdziesz Advance Settingstakiej opcji, Enable 32-bit Applicationsabyś musiał wykonać następujące polecenia:

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

i

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

Referencja: tutaj


0

Otrzymywałem ten sam wyjątek podczas uruchamiania programu „SQL Server 2014 Import and Export Data (64-bit)” na moim systemie Windows 8.1.

Aby rozwiązać problem ten problem, wykonałem następujące czynności

uruchomiłem SQL Server 2014 Import i Export Data (32-bit) zamiast 64-bit i działa dla mnie. Nie zmieniłem żadnego ustawienia IIS i nie zainstalowałem żadnego dodatkowego oprogramowania.


0

Wiem, że mam ten problem w kółko podczas wdrażania mojej aplikacji na nowym serwerze, ponieważ używam tego sterownika do łączenia się z plikiem Excel. Oto co robię ostatnio.

Jest Windows Server 2008 R2, instaluję sterowniki Access dla komputera x64 bitowego i pozbywam się tego komunikatu, co sprawia, że ​​jestem bardzo szczęśliwy, że wpadłem na inny.

Ten poniżej działa doskonale na moim komputerze deweloperskim, ale na serwerze pojawia się błąd nawet po zainstalowaniu najnowszych sterowników ODBC, co myślę, że to jest problem, ale tak to rozwiązałem.

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

Zastępuję nowego dostawcę, takiego jak poniżej:

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

Ale kiedy to robię, należy zauważyć jedną rzecz. Korzystanie z rozszerzenia pliku .xlsx i wersji programu Excel to 12.0.

Po przejściu do tego komunikatu o błędzie Błąd: „Nie można znaleźć instalowalnego ISAM” , postanawiam zmienić rzeczy trochę jak poniżej:

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

i tak, skończyłem z tą paskudną rzeczą, ale tutaj dostałem kolejną wiadomość Aparat bazy danych Microsoft Access nie może otworzyć ani zapisać do pliku „strefa_czasu”. Jest już otwarty wyłącznie przez innego użytkownika lub potrzebujesz uprawnień do przeglądania i zapisywania jego danych. co mówi mi, że nie jestem daleko od rozwiązania tego problemu.

Być może w międzyczasie otworzył się plik i wszystko, co muszę zrobić, to ponowne uruchomienie i wszystko zacznie działać płynnie zgodnie z oczekiwaniami.


0

przejdź do Start-> Uruchom i wpisz cmd, co uruchomi wiersz polecenia (dostępny również w Start-> Programy-> Akcesoria-> Wiersz polecenia)

wpisz cd .. i naciśnij klawisz Return wpisz cd .. i naciśnij klawisz Return ponownie (rób tak, aż pojawi się monit:>)

teraz musisz przejść do specjalnego folderu, którym może być c: \ windows \ system32 lub może to być c: \ winnt \ system32 lub może to być c: \ windows \ sysWOW64, spróbuj wpisać każdy z nich, np. cd c: \ windows \ sysWOW64 (jeśli jest napisane, że system nie może znaleźć określonej ścieżki, spróbuj następnej) cd c: \ windows \ system32 cd c: \ winnt \ system32, jeśli jeden z nich nie powoduje błędu, przestań, znalazłeś poprawny folder.

teraz musisz zarejestrować biblioteki DLL OLE DB 4.0, wpisując te polecenia i naciskając klawisz Return po każdej z nich

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


-2

Nie ma 64-bitowego dostawcy Jet. Jeśli chcesz obsługiwać wiele źródeł DB, w tym Jet do Excela, potrzebujesz co najmniej tej części aplikacji, aby działała w procesie 32-bitowym.

Błąd, który pojawia się podczas kompilacji dla x86, jest nieco dziwny. W tym przypadku nie widzę, w jaki sposób można odwoływać się do zestawów 64-bitowych.


Anthony, Jak mogę tylko część projektu uruchomić w trybie 32-bitowym? Wszystkie te połączenia DB, w tym Excel, będą objęte jednym projektem. Również dostałem błąd w x86, gdy próbuję uruchomić go w 64-bitowym systemie operacyjnym. Wydaje mi się, że dzieje się tak, ponieważ sterownik DB2 zainstalowany w 64-bitowym systemie operacyjnym jest wersją 64-bitową, a gdy jest ponownie powiązany z aplikacją skonfigurowaną do działania w trybie 32-bitowym, powoduje błąd.
neo

Jeśli podzielenie projektu na wiele plików exe jest bardziej kłopotliwe niż warte, pozostaje Ci tylko kompilacja do wersji 32-bitowej. Jeśli chodzi o problem z DB2, należy poszukać ekspertów w tej kwestii, być może innego konkretnego pytania dotyczącego DB2. Zazwyczaj rzeczy takie jak SQL Server instalują zarówno 32-bitowych, jak i 64-bitowych dostawców na komputerze 64-bitowym.
AnthonyWJones

Dzięki Anthony za komentarze. Po przeprowadzeniu wielu poszukiwań w tym temacie i na podstawie twoich komentarzy zrozumiałem, że muszę utworzyć część projektu, która przetwarza arkusz programu Excel jako osobny projekt i sprawia, że ​​kompiluje się w wersji 32-bitowej.
neo

3
Aby ludzie wiedzieli, A2010 będzie miał 64-bitowy Jet.
David-W-Fenton

Dzięki David, 2010 mam 64-bitowy sterownik
neo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.