簡體   English   中英

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地計算機(服務器)上注冊

[英]The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine (server)

我知道這個問題有很多答案和帖子,但對我來說沒有任何用處。

我有我的 MVC 5 應用程序,我將它部署到 IIS 7.5 到我的服務器。 應用程序運行良好,一切正常,直到我 go 到我使用 ACE.OLEDB 的操作。

我收到此錯誤:

[InvalidOperationException: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.]
System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) +1785474
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1802032
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +100
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +61
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +964
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +27
System.Data.OleDb.OleDbConnection.Open() +47
QuickbookUploadFromElite3e.Controllers.HomeController.Matters(String filePath) in c:\Users\alex.chakhau\Documents\Visual Studio 2013\Projects\QuickbookUploadFromElite3e\QuickbookUploadFromElite3e\Controllers\HomeController.cs:75
lambda_method(Closure , ControllerBase , Object[] ) +127
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +12
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +139
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() +112
System.Web.Mvc.Async.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() +452
System.Web.Mvc.Async.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) +15
System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +37
System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

我在 web 上找到了幾個答案,並執行了以下操作:

  1. 安裝Microsoft Access 數據庫引擎 2010 Redistributable
  2. 安裝2007 Office System 驅動程序:數據連接組件

我試過這個:

  1. 在解決方案資源管理器中右鍵單擊您的項目,然后單擊“屬性”
  2. 單擊構建選項卡
  3. 將平台目標從:任何 CPU 更改為 x86 | 任何 CPU 到 x64
  4. 重新構建您的解決方案

有什么建議么?

這可能是一個位數問題,但這與您的 Build 屬性中的位數無關。

ACE 驅動程序有兩個版本:x86 和 x64。

  1. 您只能安裝其中之一。
  2. 如果安裝 x86 版本,則只有 x86 應用程序可以使用它。 如果安裝 x64 版本,則只有 x64 應用程序可以使用它。 (是的,這很愚蠢。)

現在,您的 Web 應用程序是在 x86(32 位)還是 x64 模式下運行不是由您的構建設置決定,而是由您的應用程序池設置決定:在 IIS 管理器中選擇應用程序池,轉到屬性/高級設置並驗證啟用 32 位應用程序的設置 如果已設置,則您的應用程序以 x86 模式運行,否則以 x64 模式運行。 確保它與您安裝 ACE 驅動程序的模式相同。

(當然,史蒂夫關於使用正確驅動程序名稱的回答也適用。)

沒有

Microsoft.ACE.OLEDB.4.0

Microsoft.ACE.OLEDB.12.0 

Microsoft.JET.OLEDB.4.0

當然,關於 32bit 和 64bit 的通常規則應該小心應用

看到這個答案

因此,您需要安裝可 從此處下載的 Access 數據庫引擎可再發行組件。 但是您應該小心下載正確的版本(32 位或 64 位),具體取決於選擇構建您的應用程序的目標平台。 (任何CPU、x64、x86)。

當然,如果您的服務器安裝了 Office,那么您已經安裝了 ACE,但它可能適用於不同的平台,並且您的應用程序需要針對相同的平台進行編譯。 (例如,Office 32bit 然后是 ACE 32bit,您需要為 x86 編譯您的應用程序)

可能是 X86 或 X64 問題

你需要安裝它:

2007 辦公系統驅動程序:數據連接組件。( http://www.microsoft.com/en-us/download/details.aspx?id=23734

然后確保:

構建 -> 配置管理器 -> 主動解決方案平台 -> x64 http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach

您只需更改配置管理器。

步驟:

  1. 在解決方案資源管理器中右鍵單擊您的項目名稱。
  2. 選擇配置管理器。
  3. 對話框打開后,將活動解決方案平台更改為新....
  4. 再次打開對話框,選擇x86 CPU。
  5. 單擊確定並關閉配置管理器。
  6. 最后,運行您的項目。

看起來您已經安裝了 ACE 驅動程序,甚至更改應用程序池屬性也會使應用程序工作。

但是您可能缺少系統的連接驅動程序

嘗試從此鏈接安裝它,它對我有用:

https://download.cnet.com/2007-Office-System-Driver-Data-Connectivity-Components/3000-10254_4-75452798.html

--- 在嘗試下載 Microsoft Access DataEngine 等之后

我通過更改應用程序的應用程序輪詢設置 >> 啟用 32 位應用程序 (true) >> 並重新啟動應用程序來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM