2016-12-01 25 views
1

私のコンピューターには、Access 2016を搭載した64ビットOfficeと32bit Access 2010 Redistributableがインストールされています。プロバイダーMicrosoft.ACE.OLEDB.12.0は64ビットモードで実行中に登録されていませんが、アクセスは64bitです

私のVB.NETプログラムは、OleDbクラスを使用して、.accdbファイルに格納されたデータを読み書きします。

AnyCPUオプションを使用してコンパイルすると、「prefer 32 bit」オプションを設定しない限り、「Microsoft.ACE.OLEDB.12.0 provider not registered」という例外が停止して表示されます。

しかし、その後、私の全体のアプリケーションは64ビット処理の恩恵を受けないであろう、それは32ビットとして実行されます(IntPtr.Size = 4

は、それはなぜですか? .NET OleDbクラスは、Access 2016 64bitに付属の64bitプロバイダを見つけるべきではありませんか?

私はここで何が起こっているのか理解するのを手伝ってくれてありがとうと思います。

答えて

2

あなたはおそらくオフィス2016 According to Microsoftのクイック実行バージョンをインストール:オフィスの

クリック・ツー・ランのインストールは、ローカル・オペレーティング・システム上で隔離された仮想環境で実行します。 [...]呼び出し元のアプリケーションが[Microsoft.ACE.OLEDB.12.0 OLEDB provider]を検出できるように、次のいずれかのソースからMicrosoft AccessデータベースエンジンのMSIインストールをインストールする必要があります。だから、

は、次のオプションがあります:32ビットに代わり

  • 32ビットアクセスランタイムを取り除くと、インストールなさい、例えば、the 64-bit version of the Access 2013 Runtimeまたは

  • スティックを。 にMicrosoft.ACE.OLEDB.12.0ドライバをインストールする方法はありません。 32ビット版と64ビット版を同じマシンにインストールする方法はありません。 (はい、それはばかです)。代わりに、

  • (SQL Sever ExpressやSQLiteなど)に切り替えることができます。 Office製品と64ビットを組み合わせると、多くの頭痛を引き起こす傾向があります。

+0

ありがとう、@ヘインツ、あなたはそれを釘付けた。私のOfficeバージョンはClick-To-Runのもので、私はこの問題を認識していませんでした。今のところ、私はあなたの最初の提案を試みます。しかし、私は将来SQLiteの切り替えを検討します。どうもありがとうございました! – VBobCat

+0

@VBobCat:アクセスランタイムが必要ない場合は、[ドライバのみをダウンロードする](https://www.microsoft.com/en-us/download/details.aspx?id=13255)もできます。 – Heinzi

+2

フィードバック:32ビットアクセスランタイムを削除し、64ビットバージョンのAccess 2013 Runtimeをインストールすると、正常に動作しました。再びありがとう、@ Heinzi! – VBobCat

関連する問題