Dla wszystkich tych, których to dotyczy.
Wystąpił błąd ...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
... jak opisano w OP, Shailesh Sahu.
Mam 64-bitowy system Windows 7.
Mój problem dotyczy skryptów PowerShell , ale używa ciągu połączenia, podobnego do postu OP, więc mam nadzieję, że moje ustalenia można zastosować do C #, PowerShell i dowolnego innego języka opartego na sterowniku „Microsoft.ACE.OLEDB”.
Postępowałem zgodnie z instrukcjami w tym wątku na forum MS: http://goo.gl/h73RmI
Najpierw próbowałem zainstalować wersję 64-bitową , a następnie zainstalować 32- bitową wersję AccessDatabaseEngine.exe z tej strony
http://www.microsoft.com/en-us/download/details.aspx?id=13255
Ale wciąż nie ma radości.
Następnie uruchomiłem poniższy kod w PowerShell (ze strony SQL Panda http://goo.gl/A3Hu96 )
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
... co dało mi ten wynik (usunąłem inne źródła danych dla zwięzłości) ...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Jak widać, mam Microsoft.ACE.OLEDB. 15 .0 (piętnaście) nie Microsoft.ACE.OLEDB. 12 0,0 (dwanaście)
Więc zmieniłem ciąg połączenia na 15 i zadziałało.
Tak więc krótki fragment programu PowerShell w celu zademonstrowania, jak programowo kodować wersję ...
$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`";"
zmieniono, aby wybrać najnowszą wersję ACE, jeśli jest więcej niż jedna
Mamy nadzieję, że każdy, kto to znajdzie, może teraz sprawdzić, która wersja OLEDB jest zainstalowana i użyć odpowiedniego numeru wersji.