2009-06-12 22 views
1

データベースに接続するために使用する3つのデータベースプロバイダ、DB2、MS SQL、およびInterbaseがあります。正しい接続文字列、ユーザー名、パスワード、および必要なプロバイダーを渡すだけで、3つのすべてに対話するために使用できる1つの汎用データベース・ラッパー・クラスを作成したいと考えています。VB.NETで共通のデータベースクラスを作成することは可能ですか?

私は参照を追加して3つのプロバイダをすべてデータベースクラスにインポートする必要はありません。これは可能ですか?

これまでJavaでClass.forName()機能を使用していました。

答えて

3

、その使用の例は次のようになります。上の展開するには

0

フレームワーク3.5 sp1を使用できますか?

そうならば、あなたはあなたのアプリケーション内の個々のプロバイダへの参照を持ってしたくない場合、あなたは違ったこの小さなを処理する必要がありますエンティティ

3

へのLINQをご覧ください。

私が見る2つの主要な選択肢があります - まず、実行時に適切なプロバイダをプラグインするために依存性注入フレームワークを使うことです。これはシンプルでクリーンで、うまく機能します。

あなたはそれがなくても自分でできます。インターフェイスを提供する汎用の基本クラスを作成し、各プロバイダに対して、この基本クラスを実装する別々のアセンブリを作成します(参照が分離されるようにする)。実行時にActivator.CreateInstanceを使用して、適切なタイプのインスタンスを作成できます。 .NET 2.0以降に組み込まれてabstract factoryあり

1

Dim factory As System.Data.Common.DbProviderFactory 
factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient") 

Dim conn As System.Data.Common.DbConnection = factory.CreateConnection() 
conn.ConnectionString = "connectionString" 
conn.Open() 

はCreateCommand、CreateDataAdapterなどのDbProviderFactoryの方法等、ありますPatrick McDonaldの回答では、プロバイダ名と接続文字列をアプリケーション構成ファイルの< connectionStrings>セクションに格納できます。次に、アプリケーションにハードプロバイダを持っている必要はありません。

<connectionStrings> 
    <add name="MyConnectionName" providerName="System.Data.SqlClient" connectionString="Data Source=serverName;Initial Catalog=DBName;Integrated Security=True"/> 
</connectionStrings> 
:アプリケーションの設定ファイルのようなconnectionStringsセクションの何かが含まれてい

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings["MyConnectionName"]; 
if (c != null) 
{ 
    DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName); 
    IDbConnection connection = factory.CreateConnection(); 
    connection.ConnectionString = c.ConnectionString; 
    ... 
} 

関連する問題