注: この回答は、ORM(Entity FrameworkやNHibernateなど)やLINQtoSQLの代わりに基本的なADO.NET2機能を使用する場合に関連します。
app.config
で定義された接続文字列があると仮定しましょう :
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
providerName
の存在に注意してください 属性とその値。別のDBプロバイダーの値を入力することもできます。 System.Data.SQLite
。
(非標準のプロバイダー、つまりデフォルトで.NET Frameworkにないプロバイダーは、最初にapp.config
に登録する必要があることに注意してください。 またはクライアントマシンのmachine.config
。)
これで、次のように、プロバイダーに完全に依存しない方法で、指定されたデータベースを操作できます。
using System.Configuration; // for ConfigurationManager
using System.Data; // for all interface types
using System.Data.Common; // for DbProviderFactories
var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
// ^^^^^^^^^^^^^^^^
var factory = DbProviderFactories.GetFactory(cs.ProviderName);
// ^^^^^^^^^^^^^^^
using (IDbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = cs.ConnectionString;
// ^^^^^^^^^^^^^^^^^^^
connection.Open();
try
{
using (IDbCommand command = connection.CreateCommand())
{
... // do something with the database
}
}
finally
{
connection.Close();
}
}
このコードがインターフェイスタイプでのみ機能することに注意してください。特定のDBプロバイダーを指定する唯一の場所は、providerName
を使用することです。 app.config
の属性値 ファイル。 (app.config
からの設定があるすべての場所にマークを付けました ^^^
で取得されます s。)
さらに読む:
-
ADO.NET 2.0の基本クラスとファクトリを使用した一般的なコーディング:
私の回答に似ていますが、より詳細に説明します。 -
ADO.NETマネージドプロバイダーとDataSet開発者センター:
には、特に、利用可能なADO.NETデータベースプロバイダーのインデックスが含まれています。