Microsoft.Jet.OLEDB.4.0 'sağlayıcısı yerel makinede kayıtlı değil


191

.NET 3.5'te 32 bit Windows 2008 sunucusunda geliştirilen bir Windows uygulaması oluşturdum. Uygulama 64 bit sunucuya dağıtıldığında "Microsoft.Jet.OLEDB.4.0 'sağlayıcısı yerel makinede kayıtlı değil" hatasını gösteriyor.

Bu soruna bir çözüm olarak, projenin build özelliğini X86 olarak değiştirdim, böylece 32 bit modunda inşa edilecek ve 32bit makinede projeyi yeniden inşa edeceğim. Ancak, aynı proje diğer veritabanlarına bağlanmak için diğer DB sürücülerini (DB2, SQL vb.) Kullanır. Uygulamamı tekrar 64 bit işletim sistemine dağıttığımda, "32 bit bir platforma 64 bit derleme yüklenmeye çalışıldı" istisnasını atar.

Excel (.xls) okumak ve yazmak için Microsoft.Jet.OLEDB.4.0 sürücüsünü kullanıyorum

Yanıtlar:


239

Bu soruna bir çözüm buldum. Sorumda açıkladığım sorun temel olarak 64 bit işletim sistemindeki Microsoft.Jet.OLEDB.4.0 sürücüsünün uyumsuzluğu nedeniyle oluştu .

64 bit sunucuda Microsoft.Jet.OLEDB.4.0 sürücüsünü kullanıyorsanız, uygulamamızı 32 bit modunda oluşturmaya zorlamalıyız (Bu bilinen sorun için kapsamlı bir arama yaptığımda bulduğum cevap ) bu da kodumun diğer bölümlerinin bozulmasına neden oluyor.

Neyse ki, şimdi geleneksel Microsoft.Jet.OLEDB.4.0 sürücüsünün yerine kullanılabilecek 64 bit uyumlu bir 2010 Office Sistem Sürücüsü yayımladı . Hem 32 bit hem de 64 bit sunucularda çalışır. Excel dosya manipülasyonu için kullandım ve her iki ortamda da benim için iyi çalıştı.Ama bu sürücü BETA'da .

Bu sürücüyü Microsoft Access Veritabanı Altyapısı 2010 Yeniden Dağıtılabilir'den indirebilirsiniz


6
Ayrıca bu bağlantıdaki talimatlara özellikle dikkat edin :)
Mark

4
Aynı sorunu yaşadım. Uygulama yapılandırmasını x86 olarak değiştirdim, sonra çalıştı!
skpaul

9
Ayrıca Microsoft.Jet.OLEDB.4.0 Microsoft.ACE.OLEDB.12.0
Spikolynn

16
Evet, 64 bit uyumlu bir Access Veritabanı Altyapısı bulunmasına rağmen, MS Office ürünlerinin 32 bit sürümünün (ör. 32 bit MS Word) sistemde yüklü olmamasını gerektirir. Çözüm, Access Database Engine 2010'un 32 bit sürümünü kullanmanız ve .NET uygulamanızı 32 bit modunda çalışmaya zorlamanızdır (örneğin, Configuration Manager'da x86 platformunu seçerek). Uygun çözüm, MS Access'i daha iyi bir alternatifle değiştirmektir.
Massood Khaari

3
noob soru: Bu Sürücüyü "uygulamamın içinde" gibi dağıtabilir miyim yoksa uygulamamı kullanmak isteyen her kullanıcının manuel olarak yüklemesi gerekir mi?
philx_x

117

Sorun ASP.NET'te devam ederse, tek yapmam gereken "32-bit Uygulamaları Etkinleştir" ayarını Uygulama Havuzu'nun Gelişmiş Ayarlarında True olarak değiştirmekti.


64-bit ODBC kullanıyordum ve bu değişiklik bana veritabanı hatası vermeye başladı. Ben de düzelttim. Birisi bununla karşılaşırsa, 32 bit ODBC sürücülerini yüklemeniz ve ardından DSN'nizi oluşturmanız gerekir.
Farhan Hafeez

2
Bunu tamamen 64 bit kodda yapmak oldukça mümkün. Neo'nun cevabına yeniden dağıtılabilir bağlantıyı kurun , sonra İkbal'in cevabında önerilen Sağlayıcı dizesini kullanın . Sonra bu cevapların her ikisini de onaylayın. Bu kadar!
Roman Starkov

Bu, 32bit Access DB Engine Redist'i yükledikten sonra Windows Server 2008 R2'deki benim için sorunu düzeltti .
Chris Pickford

2
Olumsuz tarafı, havuzun 32 bit modunda çalışmasıdır. Bunu önlemek için bunun yerine ACE'ye geçeceğiz.
wtjones

benim için de Windows Forms ile çalıştı. hiç ASP.NET kodu yok
philx_x

53

Aynı problemim var

Microsoft.Jet.OLEDB.4.0 'sağlayıcısı yerel makinede kayıtlı değil

Cevabı neo tarafından uyguladım, ancak sağlayıcıyı “Sağlayıcı = Microsoft.ACE.OLEDB.12.0;” olarak değiştirene kadar çalışmadı . bağlantı dizesinde.

Bazıları aynı sorunla karşılaşırsa bu yardımcı olacağını umuyoruz.


4
Budur! 64-bit bir sunucu için neo (64-bit varyantı, açıkçası) ile bağlantılı yeniden dağıtılabilir olanı kurun ve ardından sağlayıcıyı bu cevapta belirtildiği şekilde değiştirin, sonra çalışır.
Roman Starkov

Haklısın romky. Neo çözümü uyguladığımı, daha sonra sağlayıcıyı değiştirdiğimi söylemiştim. Ama teşekkürler yorumunuz daha açık hale getiriyor. Çok teşekkürler romkyns
Iqbal

Microsoft.Jet.OLEDB.4.0 yerine Microsoft.ACE.OLEDB.12.0; app.config ve her şey çalıştı.
AVEbrahimi

1
Uygulamanın 32 bit ile sınırlandırılmasının hiçbir fark yaratmadığını fark ettim.
Ryan Lundy

Benim durumumda: "Microsoft.ACE.OLEDB.12.0 kaydedilmedi", :(
César León

29

Oldukça eski sorular olduğunu ve birçok kişinin cevap verdiğini biliyorum. ama anlamak için her şeyi özetliyorum:

Dosya uzantısı xls ve OS 32 bit ise yalnızca " Microsoft.Jet.OLEDB.4.0" kullanabilirsiniz . Microsoft bu sürücünün 64 bit sürümünü yayımlamamıştır.

Dosya uzantısı xlsx veya işletim sistemi 64 bit ise " Microsoft.ACE.OLEDB.12.0" kullanmanız gerekir . 32/64 bit modunda derlenen uygulama, sürücü seçimini etkilemez.

64 bit sürücüsünü her zaman Microsoft.ACE.OLEDB.12.0OS 64 bit'e yükleyin . Office 32 bit'i zaten yüklediyseniz, sürücüyü cmd'den / passive argümanıyla çalıştırmanız gerekir. Bu kesmek yalnızca Office 2013'e kadar çalışır, Microsoft bu çözümü Office 2016 for Microsoft.ACE.OLEDB.16.0 sürücüleri için durdurdu.

AccessDatabaseEngine_x64.exe /passive

Sürücüleri 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\"";
}

Uygulama AnyCPU bayrağıyla derlenmişse, 64 bit işletim sisteminde 64 bit Erişim sürücüleri ve 32 bit işletim sisteminde 32 bit erişim sürücüleri arar.


1
Cevabınız için teşekkürler, ancak Windows 10'da VS2015 ve X64 kullanıyorum. Proje yapılandırmasını AnyCPU'dan X86'ya değiştirdiğimde sorun ortadan kalktı. Başka sürücü yüklemem gerekmedi.
NoChance

@NoChance Office 64 bit'i makinenize zaten yüklediğinizi ve zaten Microsoft.ACE.OLEDB.12.0 sürücülerini içerdiğini düşünüyorum.
Romil Kumar Jain

Cevabınız için teşekkürler, sadece ofis 2007 var.
NoChance

19

Ben visual studio 2010 do ile bir web sayfası aynı mesajı var ettik, ben görsel benim projede, o sayfadaki bir file.xls okumak benim IIS yerel atmak koymuyorsun herhangi bir sorun vardır bana 'Microsoft .Jet.OLEDB.4.0 'sağlayıcı yerel makinede kayıtlı değil' , bu adımları izleyerek sonraki sorunu ,

1.-IIS'yi açın
2.- Gelişmiş Ayarlar'da appPool'u değiştirin.
3.-true , 32-bit uygulamayı etkinleştirmek için.

ve hepsi bu

ps. Active Solution Platform'da Configuration Manager'ı X86 olarak değiştirdim


Bu, uygulamanızı 32 bit modunda çalışmaya zorlar. 4GB bariyerinden kaçınmak istiyorsanız bu ayarın kapalı olması gerekir.
Brain2000

18

Uygulamanız localIIS üzerinde çalışıyorsa, AppPool'un Gelişmiş Ayarlarında 32 bit uygulamaları etkinleştirerek bu sorunu çözebilirsiniz.

resim açıklamasını buraya girin


8

Aynı sorunu yaşadım. Uygulama yapılandırmasını değiştirdim x86, sonra çalıştı!


bu yapılandırma nasıl değiştirilir? Web sitesi türü projesi oluşturdum
SHEKHAR SHETE

7

Projemin Mülkünü x64 formatında değiştirdim

Proje ---> Özellikler ---> Yapı ---> Hedef Çerçeve ---> X64


5

Masaüstü uygulamasında bu sorunla karşılaştık.

Geliştirme Ortamı: Windows 7 Ultimate - 64 bit .Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

Herhangi bir CPU'dan Platform hedefi X86 olarak değiştirilerek çözüldü. Proje Özellikleri >> Derleme >> Platform Hedefi.

resim açıklamasını buraya girin


2

Masaüstü uygulamamla bu sorunla karşılaştım ('Microsoft.Jet.OLEDB.4.0' sağlayıcısı yerel makinede kayıtlı değil). 32 bit uygulama olarak oluşturma seçeneğim yoktu. Bunu ummak aynı durumda başkalarına yardımcı olacaktır.

Aşağıdakileri yaptım ve sorun ortadan kalktı:

  1. Neo tarafından önerildiği gibi Microsoft Access Database Engine 2010 Yeniden Dağıtılabilir'in 64 bit sürümünü yükledi

  2. Sağlayıcımı Microsoft.ACE.OLEDB.12.0 olarak değiştirdi


2

Her ne kadar daha uygun bir çözüm yukarıda belirtildiği gibi basitçe derlense de, kaynak koduna erişim gerektirir. Benim durumumda, ben sadece bitmiş .exe vardı ve bu çözümü kullanmak zorunda kaldı. CorFlags.exeUygulamanın yükleme özelliklerini değiştirmek için .Net SDK'sından kullanır .

  1. .Net Framework SDK'sını indirin (Şahsen 3.5 kullandım , ancak kullanılan sürüm, uygulamanız için gerekli .Net üzerinde veya üstünde olmalıdır.
  2. Yüklerken, tek ihtiyacınız olan şey Windows Geliştirme Araçları'nıCorLibs.exe kontrol etmektir .
  3. Kurulumdan sonra CorFlags.exe. .Net Framework 3.5 SDK'sını kurmam için C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Bir komut istemi açın ve yazın path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Sen bittin! Bu, programınızın başlangıç ​​bayraklarını 32 bit WOW64 modunda başlayacak şekilde ayarlar ve bu nedenle microsoft.jet.oledb.4.0'a erişebilir.


1

IIS Ayarları uygulama havuzu gelişmiş ayarlarında değişiklik. 32 bit uygulamayı etkinleştir


1

Makinenizi temel alarak özelliği değiştirin ve hepsi :-)

Proje ---> Özellikler ---> Yapı ---> Hedef Çerçeve ---> X64

veya

Proje ---> Özellikler ---> Yapı ---> Hedef Çerçeve ---> X86


1

Bağlantı dizimi değiştirdim

var myConnectionString = string.Format ("Sağlayıcı = Microsoft.Jet.OLEDB.4.0; Veri Kaynağı = {0}; Kalıcı Güvenlik Bilgisi = Doğru; Jet OLEDB: Veritabanı Parolası =;", gisdbPath);

buna:

var myConnectionString = string.Format ("Sağlayıcı = Microsoft.Jet.OLEDB.4.0; Mod = Paylaşım Reddetme; Veri Kaynağı = {0}; kullanıcı kimliği = Yönetici; şifre =;", gisdbPath);

Microsoft.Jet.OLEDB.4.0 kayıtlı olmadım.


0

Gerçekten Jet'in 64 bit sürümü yok ve bir tane üretmek için plan yok (görünüşte).

ACE 64 bit sürücüsünü kullanabilirsiniz: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • ancak 32 bit uygulamalarınız için Jet'e geri dönmeniz gerekiyorsa bunun nasıl çalışacağına dair hiçbir fikrim yok.

Ancak, Express sürümünde projeyi 32bit'e geçirebilirsiniz (daha önce denemedim ve 2008'i herhangi bir lezzete yüklemedim)

Belki de Access veritabanlarını bir araya getirmenin, mermiyi ısırmanın ve SQL sunucusuna gitmenin zamanı geldi?



0

IIS eski sürümlerinde, sen bulamazlar Advance Settingsetkinleştirmek için bu yüzden Enable 32-bit Applicationsaşağıdaki komutları yürütmek zorunda:

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

ve

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

Referans: Burada


0

Windows 8.1'de "SQL Server 2014 Alma ve Verme (64-bit)" çalıştırırken aynı istisna alıyordum.

Bu sorunu gidermek için aşağıdakileri yaptım

64-bit yerine SQL Server 2014 Veri Alma ve Verme (32-bit) başlattı ve benim için çalışıyor. Herhangi bir IIS ayarını değiştirmedim ve fazladan bir yazılım yüklemedim.


0

Bir Excel dosyasına bağlanmak için bu sürücüyü kullandığım için uygulamamı yeni bir sunucuya dağıtırken bu sorunu defalarca yaşadığımı biliyorum. İşte son zamanlarda yaptığım şey bu.

Bir Windows Server 2008 R2 var, bir x64 bit makine için Access sürücülerini yüklüyorum ve bu mesajdan kurtuldum, bu da beni başka birine çarpmaktan çok mutlu ediyor.

Bu aşağıda aşağıda dev makinemde harika çalışıyor ancak sunucuda en son ODBC sürücülerini yükledikten sonra bile bana bir hata veriyor, ki bu sorunun olduğunu düşünüyorum, ama bu nasıl çözdüm.

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

Aşağıdaki gibi yeni sağlayıcı ile değiştirin:

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

Ama bunu yaparken dikkat etmeniz gereken bir şey var. .Xlsx dosya uzantısını ve Excel sürümünü kullanmak 12.0'dır.

Bu hata iletisine girdikten sonra Hata: "Yüklenebilir ISAM bulunamadı" , şeyleri aşağıdaki gibi biraz değiştirmeye karar verdim:

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

ve evet, bu kötü şeyi bitirdim, ama burada başka bir mesaj aldım Microsoft Access veritabanı motoru 'time_zone' dosyasını açamıyor veya yazamıyor. Yalnızca başka bir kullanıcı tarafından zaten açılmış veya verilerini görüntüleme ve yazma iznine ihtiyacınız var.bana çözmekten çok uzak olmadığımı söylüyor.

Belki bu arada dosyayı açan başka bir işlem var ve tek yapmam gereken bir yeniden başlatma ve her şey beklendiği gibi sorunsuz çalışmaya başlayacak.


0

Başlat-> Çalıştır'a gidin ve cmd yazın, bu Komut İstemi'ni başlatır (Başlat-> Programlar-> Donatılar-> Komut İstemi'nden de edinilebilir)

cd .. yazın ve return cd .. tuşuna basın ve tekrar return tuşuna basın (istem görüntülenene kadar bunu yapmaya devam edin:>)

şimdi c: \ windows \ system32 olabilecek özel bir klasöre gitmeniz veya c: \ winnt \ system32 olabilir ya da c: \ windows \ sysWOW64 bu klasörlerin her birini yazmayı deneyin, örneğin cd c: \ windows \ sysWOW64 (sistem belirtilen yolu bulamıyorsa, bir sonrakini deneyin) cd c: \ windows \ system32 cd c: \ winnt \ system32 bunlardan biri hataya neden olmadığında, durun, doğru klasör.

şimdi OLE DB 4.0 DLL'leri kaydetmeniz gerekir, bu komutları yazıp

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


-2

Jet için 64 bit sağlayıcı yok. Excel'den Jet'e dahil olmak üzere birden çok DB kaynağını desteklemek istiyorsanız, uygulamanızın 32 bit işlemde çalışması için en azından bu kısmına ihtiyacınız olacaktır.

X86 için derlerken karşılaştığınız hata biraz garip. Bu durumda 64 bit derlemelerine nasıl başvuracağınızı göremiyorum.


Anthony, Bir projenin sadece bir kısmını 32 bit modunda çalıştırmak için nasıl yapabilirim? Excel de dahil olmak üzere tüm bu DB bağlantıları tek bir proje altında toplanacak. Ayrıca 64 bit işletim sisteminde çalıştırmayı denediğimde x86'da hata aldım. Bunun 64bit işletim sisteminde yüklü DB2 sürücüsünün 64 bit bir sürüm olması ve 32 bit modunda çalışacak şekilde yapılandırılan uygulamadan referans alındığında hataya neden olması nedeniyle düşünüyorum.
neo

Eğer projeyi multipe exes'e bölmek değerinden daha zorsa, sadece 32bit'e kadar derleme ile kalırsınız. DB2 sorununa gelince, bu başka bir DB2'ye özgü soru hakkında bazı DB2 uzmanlarını arayacaksınız. Genellikle SQL Server gibi şeyler 64 bit makineye hem 32 bit hem de 64 bit sağlayıcıları yükler.
AnthonyWJones

Yorumlarınız için teşekkürler Anthony. Bu konuda çok fazla arama yapmaktan ve yorumlarınızdan anladığım şey, projenin excel sayfasını ayrı bir proje olarak işleyen ve 32 bit sürümünde derlemesini sağlayan bir kısmını oluşturmak zorundayım.
neo

3
İnsanların bildiği gibi, A2010'da 64 bit Jet olacak.
David-W-Fenton

Teşekkürler David, 2010 bir 64 bit sürücü var
neo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.