.NetFrameWork DbProviderFactoriesセクション重複エラー
Windows Server 2012でSQL Server 2014 Expressを使っているが、Microsoft SQL Server Management Studioでクエリ デザイナーの実行やテーブルの行編集しようとしたとき、又はSQL Server インポートおよびエクスポート ウィザードでデータソースを選択しようとしたとき等に例外が発生し、下記のようなエラーメッセージが表示される。
'DbProviderFactories' セクションは、1 つの構成ファイルで 1 回しか使用できません。 (System.Configuration)
Visual Stadioや.NetFrameWorkそれにSQL Serverのインストール順序によっては.NetFrameWorkのmachine.configの設定に複数の'DbProviderFactories' セクションができてしまうらしい。
全部アンインストールして所定の順序でインストールすれば良いらしいが、面倒だし所定の順序というのがわからない。
.NetFrameWorkのmachine.configを開いて見たら、このようになっていた。
<system.data>
<DbProviderFactories>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
</DbProviderFactories>
<DbProviderFactories/>
</system.data>
IBMのiAccess をインストールをしたときに'DbProviderFactories' セクションが設定されたようだが、デフォルトの何も無い設定 <DbProviderFactories/> も残ったままになっている。
このため「1 つの構成ファイルで 1 回しか使用できません」と怒られたのだろう。
ということで<DbProviderFactories/>の行を削除してみたところ、エラーは出なくなった。
.NetFrameWorkのフォルダは32ビットと64ビットの両方存在するので両方のmachine.configを修正しておく必要がある。
それぞれのフォルダは下記のようになっている。
64ビット用:%windir%\Microsoft.NET\Framework64\[.NetFrameWorkのバージョン]\Config\
32ビット用:%windir%\Microsoft.NET\Framework\[.NetFrameWorkのバージョン]\Config\
ちなみに、32ビット用だけを修正したら、Microsoft SQL Server Management Studioでのエラーが解消され、
64ビット用も修正したら、SQL Server インポートおよびエクスポート ウィザードでのエラーが解消された。
この記事へのコメント