1

データベースへの接続に使用するデータベース プロバイダーは、DB2、MS SQL、および Interbase の 3 つです。正しい接続文字列、ユーザー名、パスワード、および必要なプロバイダーを渡すだけで、3 つすべてと対話するために使用できる単一の汎用データベース ラッパー クラスを作成したいと考えています。

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

関数を使用してJavaでこれを行ったことがありClass.forName()ます。

4

4 に答える 4

3

.NET 2.0 以降に組み込まれた抽象ファクトリがあり、その使用例は次のようになります。

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 のメソッドがあります。

于 2009-06-12T16:26:31.893 に答える
3

アプリケーションで個々のプロバイダーへの参照を保持したくない場合は、これを少し異なる方法で処理する必要があります。

私が見る主なオプションは 2 つあります。最初の (そして最も簡単な) 方法は、依存性注入フレームワークを使用して、実行時に適切なプロバイダーをプラグインするだけです。これはシンプルでクリーンで、うまく機能します。

ただし、それがなくても自分で行うことができます。インターフェイスを提供する汎用の基本クラスを作成し、プロバイダーごとに、この基本クラスを実装する個別のアセンブリを作成します (参照が分離されます)。その後、Activator.CreateInstanceを使用して、実行時に適切な型のインスタンスを作成できます。

于 2009-06-12T16:23:55.173 に答える
1

Patrick McDonald の回答を拡張するには、プロバイダー名と接続文字列をアプリケーション構成ファイルの <connectionStrings> セクションに保存します。次に、プロバイダーをアプリケーションにハードコーディングする必要はありません。

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

アプリケーション構成ファイルには、次のような connectionStrings セクションが含まれています。

<connectionStrings>
  <add name="MyConnectionName" providerName="System.Data.SqlClient" connectionString="Data Source=serverName;Initial Catalog=DBName;Integrated Security=True"/>
</connectionStrings>
于 2009-06-12T17:33:38.940 に答える
0

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

はいの場合は、Linq to Entity を確認する必要があります

于 2009-06-12T16:23:31.057 に答える