Hala bundan etkilenen herkes için.
Hatayı alıyorum ...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
... OP, Shailesh Sahu tarafından tarif edildiği gibi.
64bit Windows 7 kullanıyorum.
Sorunum PowerShell içinde komut dosyaları , ancak OP yazısına benzer bir bağlantı dizesi kullanıyor, bu yüzden umarım bulgularım C #, PowerShell ve "Microsoft.ACE.OLEDB" sürücüsüne dayanan herhangi bir dile uygulanabilir.
Bu MS forum iş parçacığında yönergeleri izledim: http://goo.gl/h73RmI
Önce 64bit sürümünü yüklemeyi, ardından bu sayfadan AccessDatabaseEngine.exe dosyasının 32bit sürümünü
yüklemeyi denedim http://www.microsoft.com/en-us/download/details.aspx?id=13255
Ama yine de neşe yok.
Daha sonra PowerShell'de aşağıdaki kodu çalıştırdım (SQL Panda'nın sitesinden http://goo.gl/A3Hu96 )
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
... bana bu sonucu verdi (kısalık için diğer veri kaynaklarını kaldırdım) ...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Gördüğünüz gibi Microsoft.ACE.OLEDB var. 15 .0 (on beş) Microsoft.ACE.OLEDB değil.12 .0 (on iki)
Böylece, bağlantı dizgimi 15 olarak değiştirdim ve işe yaradı.
Yani, sürümün nasıl yumuşak kodlanacağını göstermek için hızlı bir PowerShell snippet'i ...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
birden fazla ise, en son ACE sürümünü seçecek şekilde değiştirildi
Umarım, bunu bulan herkes şimdi hangi OLEDB sürümünün yüklü olduğunu kontrol edebilir ve uygun sürüm numarasını kullanabilir.