web-dev-qa-db-ja.com

「Microsoft.ACE.OLEDB.12.0」プロバイダーがローカルマシン(サーバー)に登録されていません

この質問には多数の回答と投稿がありますが、私には何の役にも立ちません。

MVC 5アプリケーションがあり、それをIIS 7.5にサーバーにデプロイします。アプリケーションは素晴らしい動作をします。

私はこのエラーを受け取っています:

[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

私はウェブ上でいくつかの答えを見つけて、次のことをしました:

  1. インストール Microsoft Access Database Engine 2010 Redistributable
  2. インストール 2007 Office System Driver:データ接続コンポーネント

私はこれを試しました:

  1. ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティ]をクリックします
  2. [ビルド]タブをクリックします
  3. プラットフォームターゲットを任意のCPUからx86に変更| CPUからx64
  4. ソリューションを再構築する

助言がありますか?

13
Bryuk

おそらくビットの問題ですが、ビルドプロパティのビットの問題ではありません。

ACEドライバーには、x86とx64の2つのバージョンがあります。

  1. インストールできるのは1つだけです。
  2. X86バージョンをインストールすると、x86アプリケーションのみがそれを使用できます。 x64バージョンをインストールすると、x64アプリケーションのみがそれを使用できます。 (はい、バカです。)

これで、Webアプリケーションをx86(32ビット)モードで実行するかx64モードで実行するかは、ビルド設定ではなく、アプリケーションプールの設定によってnotによって決まります=:IIS Managerでアプリケーションプールを選択し、プロパティ/詳細設定に移動し、32ビットアプリケーションを有効にするの設定を確認します。が設定されている場合、アプリケーションはx86モードで実行され、そうでない場合はx64モードで実行されます。

(もちろん、 Steve's answer 正しいドライバー名の使用についても適用されます。)

28
Heinzi

ありません

Microsoft.ACE.OLEDB.4.0

有る

Microsoft.ACE.OLEDB.12.0 

または

Microsoft.JET.OLEDB.4.0

もちろん、32ビットと64ビットに関する通常のルールは慎重に適用する必要があります

この回答を参照

そのため、再配布可能なAccess Database Engineをインストールする必要があります。再配布可能 こちらからダウンロード 。ただし、アプリのビルドに選択したターゲットプラットフォームに応じて、正しいバージョン(32ビットまたは64ビット)をダウンロードするように注意する必要があります。 (AnyCPU、x64、x86)。

もちろん、サーバーにOfficeがインストールされている場合は、ACEが既にインストールされていますが、別のプラットフォーム用であり、アプリケーションを同じようにコンパイルする必要があります。 (例、Office 32ビット、次にACE 32ビット、x86用にアプリをコンパイルする必要があります)

9
Steve

おそらくX86またはX64の問題です

あなたはそれをインストールする必要があります:

2007 Office System Driver:データ接続コンポーネント( http://www.Microsoft.com/en-us/download/details.aspx?id=23734

次に確認してください:

BUILD-> Configuration Manager-> Active Solution Platform-> x64 http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach =

3
JC Lizard

構成マネージャーを変更するだけです。

手順:

  1. ソリューションエクスプローラーでプロジェクト名を右クリックします。
  2. 構成マネージャーを選択します。
  3. ダイアログボックスが開いたら、アクティブソリューションプラットフォームを新規として変更します。
  4. もう一度ダイアログボックスが開いたら、x86 CPUを選択します。
  5. [OK]をクリックして、構成マネージャーを閉じます。
  6. 最後に、プロジェクトを実行します。
1
Bhakti K Mishra