ADO.NETにてDbProviderFactoryオブジェクトを用いて、処理を行なう場合、まずDbProviderFactoriesから
該当するInvariantNameを持つデータプロバイダファクトリオブジェクトを取得します。
コードでいうと以下のような感じです。(オラクル用のデータプロバイダファクトリを取得する場合)
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient");
この設定は、通常.NET Frameworkのディレクトリ以下のCONFIG/machine.configに設定されています。
(通常だと、このディレクトリはc:/windows/microsoft.NET/Framework/v2.xxxxxとかになります。)
machine.configの中に、DbProviderFactoriesというタグがあり、その中に利用できるデータプロバイダファクトリの
設定が記述されています。
この場所に記述されているデータプロバイダファクトリは、グローバルに有効になります。
つまり、どこからでも利用できるデータプロバイダファクトリとなります。
でも、時には自分のアプリの中だけで利用したいデータプロバイダファクトリもあります。
また、理由によりmachine.configを書き換えることが許されない環境もあるでしょう。
そういう場合には、アプリケーション構成ファイルの中に定義することが出来ます。
(windows formsの場合はApp.configとなります。)
以下のようにしてApp.config内に定義します。
(以下はPostgreSQL用のデータプロバイダーであるNpgsqlの設定を行なっています。)
<system.data> <DbProviderFactories> <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=1.98.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" /> </DbProviderFactories> </system.data>
これをconfigSectionsの下に定義しておくと自動的に読み込まれます。
確認方法はアプリケーションを動かした時に
DbProviderFactories.GetFactoryClasses()
メソッドを呼び、追加した名前が存在していればオッケイです。