エラーの概要
このエラーは通常、.NET アプリケーション、IIS 上の Web サービス、または SQL Server インポートおよびエクスポート ウィザードが Excel (.xlsx) や Access (.accdb) ファイルを読み取ろうとしたときに発生します。システムは通信を仲介するための OLEDB ドライバを検索しますが、その仲介役が見つからないか、ビット数が異なると、接続は即座に失敗します。
2つの主な原因
接続失敗のほとんどは、2つの特定の問題に起因します。1つ目は、Microsoft Access Database Engine が完全に不足していること。2つ目は、より一般的な原因であるビット数(Bitness)の不一致です。アプリケーションが 64 ビット プロセスとして実行されているのに 32 ビット ドライバしかインストールされていない場合、ドライバがハードドライブに存在していても、アプリケーションはプロバイダーを「認識」できません。
手順 1: 正しい Database Engine をインストールする
Microsoft Office がインストールされているからといって、必要な OLEDB プロバイダーが揃っているとは限りません。Office のインストールには、外部ソフトウェアが必要とする再頒布可能コンポーネントが含まれていないことがよくあります。これを修正するには、Microsoft Access Database Engine 2016 再頒布可能コンポーネントをダウンロードしてください。
- アプリのアーキテクチャを確認する: Windows のバージョンではなく、アプリケーションのビット数にドライバを合わせる必要があります。
- アプリが 32 ビットの場合は、
accessdatabaseengine.exe(約 75 MB)をダウンロードします。 - アプリが 64 ビットの場合は、
accessdatabaseengine_X64.exe(約 79 MB)をダウンロードします。
手順 2: ビット数の不一致を解消する
これは開発者が最も頻繁に直面する障害です。例えば、64 ビットの Windows マシンに 32 ビットの Office がインストールされているとします。ターゲットを「Any CPU」にして .NET アプリをビルドすると、ランタイムはデフォルトで 64 ビットになります。すると、32 ビットのハイブにしか存在しないドライバを 64 ビットのレジストリで探してしまいます。
Visual Studio の設定:
インストールされているドライバの特定のアーキテクチャをターゲットにするよう、プロジェクトに強制します。
- ソリューション エクスプローラーでプロジェクトを右クリックし、プロパティを選択します。
- ビルドタブに移動します。
- プラットフォーム ターゲットのドロップダウンを探します。
Any CPUからx86(32 ビット ドライバの場合)またはx64(64 ビット ドライバの場合)に切り替えます。- ソリューションをリビルドし、接続をテストします。
IIS Web アプリケーションの設定:
IIS のアプリケーション プールはデフォルトで 64 ビット モードで動作するため、Web アプリケーションでエラーが発生することがよくあります。32 ビット ドライバを使用している場合は、プール設定を調整する必要があります。
- IIS マネージャーを開き、アプリケーション プールをクリックします。
- アプリケーションを実行しているプールを見つけ、詳細設定を選択します。
- 32 ビット アプリケーションの有効化を探し、
Trueに設定します。
手順 3: SQL Server と SSMS の注意点
SQL Server インポートおよびエクスポート ウィザードを使用する際、SQL Server Management Studio (SSMS) は 32 ビット アプリケーションであることに注意してください。強力な 64 ビット サーバー上であっても、標準のウィザードは 64 ビットの ACE プロバイダーを見つけられない場合があります。64 ビット ドライバを使用している場合は、常にスタート メニューから SQL Server インポートおよびエクスポート ウィザード (64 ビット) を探して実行してください。
登録済みプロバイダーの確認方法
ドライバが正しく登録されているかどうか推測するのはやめましょう。PowerShell を使用して OS に直接問い合わせ、環境で何が利用可能かを正確に確認できます。次のコマンドを実行してください。
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION | Where-Object { $_.SOURCES_NAME -like "*ACE.OLEDB*" }
結果が空の場合、ドライバが不足しているか、32 ビット ドライバしかインストールされていないのに 64 ビット版の PowerShell を実行している可能性があります。
標準的な接続文字列
適切にフォーマットされた接続文字列は不可欠です。最新の Excel ファイル (.xlsx) の場合は、次の構造を使用します。
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\Sales.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";
本番環境向けのプロのヒント
- サーバーの衛生管理: 本番サーバーに Office スイート全体をインストールしないでください。攻撃対象領域が増え、不要なオーバーヘッドが発生します。再頒布可能エンジンのみを使用してください。
- 強制インストール: 32 ビットの Office が存在するために 64 ビットのインストーラーがブロックされる場合は、コマンドラインから
/quietフラグを付けてインストーラーを実行し、チェックを回避します。 - バージョンのアップグレード:
ACE.OLEDB.12.0が標準ですが、50MB を超える巨大な Excel ワークブックで安定性の問題が発生する場合は、Microsoft.ACE.OLEDB.16.0(2016 再頒布可能版)へのアップグレードで解決することがよくあります。

