Penyedia Microsoft.Jet.OLEDB.4.0 'tidak terdaftar pada mesin lokal

191

Saya membuat aplikasi windows yang dikembangkan dalam. NET 3.5 di server Windows 2008 32 bit. Ketika digunakan aplikasi dalam server 64 bit itu menunjukkan kesalahan "penyedia Microsoft.Jet.OLEDB.4.0 'tidak terdaftar di mesin lokal".

Jadi sebagai solusi untuk masalah ini, saya telah mengubah properti build proyek menjadi X86, sehingga ia akan membangun dalam mode 32 bit, dan membangun kembali proyek di mesin 32bit. Tapi, proyek yang sama menggunakan driver DB lain (DB2, SQL dll.) Untuk terhubung ke database lain. Jadi ketika saya memasang aplikasi saya lagi di OS 64 bit, itu melempar pengecualian "Mencoba memuat perakitan 64-bit pada platform 32-bit."

Saya menggunakan driver Microsoft.Jet.OLEDB.4.0 untuk membaca dan menulis ke Excel (.xls)

neo
sumber

Jawaban:

238

Saya menemukan solusi untuk masalah ini. Masalah yang saya jelaskan dalam pertanyaan saya pada dasarnya terjadi karena ketidakcocokan driver Microsoft.Jet.OLEDB.4.0 di OS 64 bit.

Jadi jika kita menggunakan driver Microsoft.Jet.OLEDB.4.0 di server 64 bit, kita harus memaksa aplikasi kita untuk membangun dalam mode 32 bit (Ini adalah jawaban yang saya temukan ketika saya melakukan pencarian ekstensif untuk masalah yang diketahui ini ) dan itu menyebabkan bagian lain dari kode saya rusak.

Untungnya, sekarang Microsoft telah merilis Driver Sistem Office 2010 64 bit yang kompatibel yang dapat digunakan sebagai pengganti untuk driver Microsoft.Jet.OLEDB.4.0 tradisional. Ia bekerja baik di server 32 bit maupun 64 bit. Saya telah menggunakannya untuk manipulasi file Excel dan bekerja dengan baik untuk saya di kedua lingkungan.Tapi driver ini ada di BETA .

Anda dapat mengunduh driver ini dari Microsoft Access Database Engine 2010 Redistributable

neo
sumber
6
Juga perhatikan instruksi pada tautan itu :)
Mark
4
Saya memiliki masalah yang sama. Saya mengubah konfigurasi aplikasi ke x86, lalu berhasil!
skpaul
9
juga saya harus mengubah string koneksi dari menggunakan Microsoft.Jet.OLEDB.4.0 ke Microsoft.ACE.OLEDB.12.0
Spikolynn
16
Ya, meskipun Access Database Engine 64-bit yang kompatibel tersedia, ia mensyaratkan bahwa tidak ada versi 32-bit produk MS Office yang sudah diinstal pada sistem (mis. 32-bit MS Word) yang merupakan masalah besar. Solusinya adalah Anda menggunakan versi 32-bit Access Database Engine 2010 dan memaksa aplikasi .NET Anda untuk berjalan dalam mode 32-bit (mis. Dengan memilih platform x86 di Pengelola Konfigurasi). Dan solusi yang tepat adalah mengganti MS Access dengan alternatif yang lebih baik.
Massood Khaari
2
pertanyaan noob: dapatkah saya mendistribusikan Driver ini seperti "dalam aplikasi saya" atau apakah setiap pengguna yang ingin menggunakan aplikasi saya harus menginstalnya secara manual?
philx_x
117

Jika masalah tetap ada di ASP.NET, Yang harus saya lakukan adalah mengubah pengaturan "Aktifkan Aplikasi 32-bit" ke True, di Pengaturan Lanjut untuk Kumpulan Aplikasi.

Jason Wicker
sumber
Saya menggunakan ODBC 64-bit dan perubahan ini mulai memberi saya kesalahan basis data. Saya memperbaikinya. Jika seseorang menemukan ini juga, Anda harus menginstal driver ODBC 32-bit dan kemudian membuat DSN Anda di dalamnya.
Farhan Hafeez
2
Sangat mungkin untuk melakukan ini sepenuhnya dalam kode 64-bit sekarang. Instal tautan yang dapat didistribusikan kembali dalam jawaban neo , lalu gunakan string Penyedia yang disarankan dalam jawaban Iqbal . Kemudian, angkatlah kedua jawaban itu. Itu dia!
Roman Starkov
Ini memperbaiki masalah bagi saya di Windows Server 2008 R2 setelah menginstal 32bit Access DB Engine Redist .
Chris Pickford
2
The downside adalah bahwa kolam akan berjalan dalam mode 32-bit. Kami akan beralih ke ACE untuk menghindari ini.
wtjones
bekerja untuk saya dengan Windows Forms juga. tidak ada kode ASP.NET sama sekali
philx_x
52

Saya memiliki masalah yang sama

Penyedia Microsoft.Jet.OLEDB.4.0 'tidak terdaftar pada mesin lokal

Saya menerapkan jawaban dengan neo tetapi tidak berfungsi sampai saya mengubah penyedia ke "Provider = Microsoft.ACE.OLEDB.12.0;" dalam string koneksi.

Semoga ini bisa membantu jika seseorang menghadapi masalah yang sama.

Iqbal
sumber
4
Ini dia! Untuk server 64-bit, instal redistributable yang ditautkan oleh neo (varian 64-bit, tentu saja), dan kemudian ubah penyedia sebagaimana ditentukan dalam jawaban ini, maka itu akan berfungsi.
Roman Starkov
Anda romkyn benar. Saya sudah mengatakan saya menerapkan solusi neo, lalu mengubah penyedia. Tapi terima kasih komentar Anda membuatnya lebih jelas. Terima kasih banyak romkyns
Iqbal
menggantikan Microsoft.Jet.OLEDB.4.0 dengan Microsoft.ACE.OLEDB.12.0; di app.config dan semuanya berfungsi.
AVEbrahimi
1
Saya menemukan bahwa ini berhasil, sementara membatasi aplikasi menjadi 32-bit tidak membuat perbedaan apa pun.
Ryan Lundy
Dalam kasus saya: "Microsoft.ACE.OLEDB.12.0 tidak terdaftar", :(
César León
29

Saya tahu ini pertanyaan yang cukup lama dan banyak orang telah menjawab. tapi saya meringkas hal-hal untuk dipahami:

Jika ekstensi file adalah xls dan OS adalah 32 bit maka hanya Anda yang dapat menggunakan " Microsoft.Jet.OLEDB.4.0". Microsoft belum merilis versi 64 bit driver ini.

Jika ekstensi file adalah xlsx atau OS adalah 64 bit maka Anda harus menggunakan " Microsoft.ACE.OLEDB.12.0". Aplikasi yang dikompilasi dalam mode 32/64 bit tidak memengaruhi pemilihan driver.

Selalu instal driver 64 bit Microsoft.ACE.OLEDB.12.0pada OS 64 bit. Jika Anda sudah menginstal Office 32 bit maka Anda perlu menjalankan driver dari cmd dengan / argumen pasif. Peretasan ini hanya berfungsi hingga Office 2013, Microsoft menghentikan solusi ini dari Office 2016 untuk driver Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

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

Jika Aplikasi dikompilasi dengan flag AnyCPU, ia akan mencari driver Access 64 bit pada OS 64 bit dan driver akses 32 bit pada OS 32 bit.

Romil Kumar Jain
sumber
1
Terima kasih atas jawaban Anda, bagaimanapun, saya menggunakan VS2015 pada Windows 10 dan menggunakan X64. Ketika saya mengubah konfigurasi proyek dari AnyCPU ke X86, masalahnya hilang. Saya tidak perlu menginstal driver tambahan.
NoChance
@NoChance Saya pikir Anda sudah menginstal Office 64 bit pada mesin Anda dan sudah berisi driver Microsoft.ACE.OLEDB.12.0.
Romil Kumar Jain
Terima kasih untuk balasan Anda, saya hanya punya kantor 2007.
NoChance
19

Saya memiliki pesan yang sama, saya memiliki halaman web dengan lakukan di visual studio 2010, saya membaca file.xls pada halaman itu, dalam proyek visual saya tidak ada masalah, ketika saya meletakkannya di IIS lokal saya lempar saya 'Microsoft .Jet.OLEDB.4.0 'penyedia tidak terdaftar di mesin lokal' , saya memperbaiki masalah itu selanjutnya mengikuti langkah-langkah ini,

1.-Buka IIS
2.-Ubah appPool pada Pengaturan Lanjut
3.-true untuk mengaktifkan aplikasi 32-bit.

dan itu saja

ps. Saya mengubah Pengelola Konfigurasi ke X86 pada Platform Solusi Aktif

Leo
sumber
Ini memaksa aplikasi Anda untuk berjalan dalam mode 32 bit. Anda memerlukan pengaturan ini jika Anda ingin dapat menghindari penghalang 4GB.
Brain2000
18

Jika aplikasi Anda berjalan pada localIIS, Anda dapat menyelesaikan masalah ini dengan mengaktifkan aplikasi 32-bit di Pengaturan Lanjutan AppPool

masukkan deskripsi gambar di sini

Mumin Ka
sumber
8

Saya memiliki masalah yang sama. Saya mengubah konfigurasi aplikasi menjadi x86, lalu berhasil!

Kakopappa
sumber
bagaimana cara mengubah konfigurasi ini? Saya telah membuat proyek jenis situs web
SHEKHAR SHETE
7

Saya baru saja mengubah Properti proyek saya ke dalam format x64

Project ---> Properties ---> Build ---> Target Framework ---> X64

Muhamed Shafeeq
sumber
5

Kami telah menemukan masalah ini di aplikasi desktop.

Lingkungan Dev: Windows 7 Ultimate - 64 bit .Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

Ini telah diatasi dengan mengubah target Platform ke X86 dari CPU mana pun. Properti Proyek >> Bangun >> Target Platform.

masukkan deskripsi gambar di sini

Techvalens
sumber
2

Saya mengalami masalah ini dengan aplikasi desktop saya (penyedia 'Microsoft.Jet.OLEDB.4.0' tidak terdaftar pada mesin lokal). Saya tidak memiliki opsi untuk membangun sebagai aplikasi 32 bit. Berharap ini akan membantu orang lain dalam situasi yang sama.

Saya melakukan yang berikut dan masalahnya hilang:

  1. Menginstal versi 64 bit dari Microsoft Access Database Engine 2010 Redistributable , seperti yang disarankan oleh neo

  2. Mengubah penyedia saya ke Microsoft.ACE.OLEDB.12.0

robinhood9
sumber
2

Meskipun solusi yang lebih optimal adalah dengan hanya mengkompilasi ulang seperti yang disarankan di atas, yang memerlukan akses ke kode sumber. Dalam kasus saya, saya hanya memiliki .exe yang telah selesai dan harus menggunakan solusi ini. Ini menggunakan CorFlags.exedari .Net SDK untuk mengubah karakteristik pemuatan aplikasi.

  1. Unduh .Net Framework SDK (Saya pribadi menggunakan 3.5 , tetapi versi yang digunakan harus pada atau di atas. Net yang diperlukan untuk aplikasi Anda.
  2. Saat memasang, yang Anda butuhkan adalah CorLibs.exe, jadi cukup periksa Alat Pengembangan Windows .
  3. Setelah instalasi, temukan CorFlags.exe . Untuk saya menginstal .Net Framework 3.5 SDK, itu di C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Buka prompt perintah dan ketik path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+ .

Kamu sudah selesai! Ini menetapkan flag awal untuk program Anda sehingga mulai dalam mode WOW64 32 bit, dan karenanya dapat mengakses microsoft.jet.oledb.4.0.

Cullub
sumber
1

Ubah pengaturan aplikasi IIS kolam pengaturan lanjutan. Aktifkan aplikasi 32 bit

dpsrikanth
sumber
1

Cukup Ubah properti berdasarkan mesin Anda dan semua telah dilakukan :-)

Project ---> Properties ---> Build ---> Target Framework ---> X64

atau

Project ---> Properties ---> Build ---> Target Framework ---> X86

Ajmal
sumber
1

Saya telah mengubah string koneksi saya dari

var myConnectionString = string.Format ("Penyedia = Microsoft.Jet.OLEDB.4.0; Sumber Data = {0}; Info Keamanan Tetap = Benar; Jet OLEDB: Kata Sandi Database =;", gisdbPath);

untuk ini:

var myConnectionString = string.Format ("Penyedia = Microsoft.Jet.OLEDB.4.0; Mode = Bagikan Tolak Tidak Ada; Sumber Data = {0}; id pengguna = Admin; kata sandi =;", gisdbPath);

Ini bekerja dari saya tidak pernah meminta Microsoft.Jet.OLEDB.4.0dibagikan.

Dilhan RK
sumber
0

Memang tidak ada versi 64 bit Jet - dan tidak ada rencana (tampaknya) untuk menghasilkan satu.

Anda mungkin dapat menggunakan driver ACE 64 bit: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • tapi saya tidak tahu bagaimana cara kerjanya jika Anda perlu kembali ke Jet untuk aplikasi 32 bit Anda.

Namun, Anda mungkin dapat mengalihkan proyek ke 32bit dalam versi Express (saya belum mencoba dan tidak memiliki 2008 diinstal dalam rasa lagi)

Mungkin sudah waktunya untuk menghapus akses database sama sekali, menggigit peluru dan pergi untuk SQL server?

Anant Dabhi
sumber
0

Dalam versi IIS yang lebih lama, Anda tidak akan menemukannya Advance Settingsuntuk memungkinkan Enable 32-bit ApplicationsAnda harus menjalankan perintah berikut:

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

dan

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

Referensi: Di Sini

Usman Khalid
sumber
0

Saya mendapatkan pengecualian yang sama saat menjalankan "SQL Server 2014 Impor dan Ekspor Data (64-bit)" di Windows 8.1 saya.

Untuk memperbaiki masalah ini, saya telah melakukan yang berikut ini

mulai SQL Server 2014 Impor dan Ekspor Data (32-bit) alih-alih 64-bit dan berfungsi untuk saya. Saya belum mengubah pengaturan IIS dan tidak menginstal perangkat lunak tambahan apa pun.

Banketeshvar Narayan
sumber
0

Saya tahu bahwa saya memiliki masalah ini berulang kali ketika saya menggunakan aplikasi saya di server baru karena saya menggunakan driver ini untuk terhubung ke file Excel. Jadi inilah yang saya lakukan belakangan ini.

Ada Windows Server 2008 R2, saya menginstal driver Access untuk mesin x64 bit dan saya menyingkirkan pesan ini, yang membuat saya sangat senang hanya untuk bertemu dengan yang lain.

Yang ini di sini di bawah ini bekerja dengan baik pada mesin dev saya tetapi pada server memberi saya kesalahan bahkan setelah menginstal driver ODBC terbaru, yang saya pikir ini masalahnya, tapi ini adalah bagaimana saya menyelesaikannya.

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

Saya ganti dengan penyedia baru seperti ini di bawah ini:

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

Tetapi ketika saya melakukan ini, ada satu hal yang harus Anda perhatikan. Menggunakan ekstensi file .xlsx dan versi Excel adalah 12.0.

Setelah saya masuk ke pesan kesalahan ini: "Tidak Dapat Menemukan ISAM yang Dapat Diinstal" , saya memutuskan untuk mengubah beberapa hal seperti di bawah ini:

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

dan ya, saya sudah selesai dengan hal jahat itu, tetapi di sini saya mendapat pesan lain Mesin basis data Microsoft Access tidak dapat membuka atau menulis ke file 'time_zone'. Itu sudah dibuka secara eksklusif oleh pengguna lain, atau Anda perlu izin untuk melihat dan menulis datanya. yang memberitahu saya saya tidak jauh dari menyelesaikannya.

Mungkin ada proses lain yang membuka file sementara itu dan semua yang harus saya lakukan adalah restart dan semua akan mulai berjalan lancar seperti yang diharapkan.

Nick
sumber
0

pergi ke Start-> Run dan ketik cmd ini mulai Command Prompt (juga tersedia dari Start-> Programs-> Accessories-> Command Prompt)

ketik cd .. dan tekan return ketik cd .. dan tekan kembali lagi (terus lakukan ini sampai muncul prompt:>)

sekarang Anda harus pergi ke folder khusus yang mungkin c: \ windows \ system32 atau mungkin c: \ winnt \ system32 atau mungkin c: \ windows \ sysWOW64 coba ketikkan masing-masing ini misalnya cd c: \ windows \ sysWOW64 (jika dikatakan Sistem tidak dapat menemukan jalur yang ditentukan, coba yang berikutnya) cd c: \ windows \ system32 cd c: \ winnt \ system32 ketika salah satu dari itu tidak menyebabkan kesalahan, berhenti, Anda telah menemukan folder yang benar.

sekarang Anda harus mendaftarkan OLE DB 4.0 DLL dengan mengetikkan perintah ini dan menekan return setelah masing-masing

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

pengguna1089766
sumber
-2

Tidak ada penyedia 64 bit untuk Jet. Jika Anda ingin mendukung beberapa sumber DB termasuk Jet to Excel, Anda akan memerlukan setidaknya bagian dari aplikasi Anda untuk berjalan dalam proses 32 bit.

Kesalahan yang Anda dapatkan ketika Anda mengkompilasi untuk x86 agak aneh. Saya tidak bisa melihat bagaimana Anda akhirnya merujuk rakitan 64 bit dalam kasus ini.

AnthonyWJones
sumber
Anthony, Bagaimana saya bisa membuat hanya sebagian dari proyek untuk berjalan dalam mode 32bit? Semua koneksi DB ini, termasuk Excel, akan berada di bawah satu proyek. Saya juga mendapatkan kesalahan di x86, ketika saya mencoba menjalankannya di OS 64 bit. Saya pikir ini karena driver DB2 yang diinstal pada OS 64bit adalah versi 64bit dan ketika direferensikan dari aplikasi, yang dikonfigurasi untuk dijalankan dalam mode 32 bit, menyebabkan kesalahan.
neo
Jika membagi proyek menjadi multipe exes lebih merepotkan daripada nilainya, Anda hanya perlu mengompilasi ke 32bit. Mengenai masalah DB2 Anda akan mencari beberapa ahli DB2 tentang ini mungkin pertanyaan spesifik DB2 lain. Biasanya hal-hal seperti SQL Server akan menginstal penyedia 32 bit dan 64 bit pada mesin 64 bit.
AnthonyWJones
Terima kasih Anthony atas komentar Anda. Dari melakukan banyak pencarian pada masalah ini dan dari komentar Anda, apa yang saya pahami adalah, saya harus membuat bagian dari proyek yang memproses lembar excel sebagai proyek terpisah dan membuatnya dikompilasi dalam versi 32 bit.
neo
3
Asal tahu saja, A2010 akan memiliki Jet 64-bit.
David-W-Fenton
Terima kasih David, 2010 memiliki driver 64 bit
neo