執筆者: インフラジスティックス・ジャパン株式会社 池原 大然

動作確認環境: Visual Studio 2010、.NET Framework 2.0、Windows 7 Ultimate 64 bit、SQL Server 2008 R2 Express Edition 64 bit


ADO.NET では汎用的なデータ アクセスを行うために System.Data.Common.DbProviderFactory クラス が用意されています。このプロバイダー ファクトリを利用することでアプリケーション実行時にユーザーが使用するプロバイダーを選択することが可能になります。今回のサンプル コードでは Windows フォーム アプリケーションにおいて、System.Data.Common.DbProviderFactories クラス を用い、インストールされているプロバイダーを表示させ、選択したプロバイダーを用いて AdventureWorks2008R2 データベース (英語) に接続します。なお、Windows フォーム アプリケーションの作成方法については [C#] Windows フォームによるクライアント アプリケーション開発 を参照してください。

1. Windows フォーム アプリケーション プロジェクトを作成し、Form1 に ComboBox, TextBox, Button コントロールを貼り付けます。

図 1

2. コンストラクターにおいて、DbProviderFactories.GetFactoryClasses メソッド を用いてインストールされているプロバイダーの一覧を取得し、ComboBox に表示させます。また、TextBox には接続文字列を定義します。この接続文字列は SqlClient Data Provider 用に設定されています。

C#
public Form1() 
{ 
    InitializeComponent(); 
             
    // インストールされているプロバイダー一覧を取得します。 
    this.comboBox1.DataSource = DbProviderFactories.GetFactoryClasses(); 
    this.comboBox1.ValueMember = "InvariantName"; 
    this.comboBox1.DisplayMember = "Name"; 
 
    // 接続文字列の定義 
    this.textBox1.Text =  
        @"Data Source=.\SQLEXPRESS; Initial Catalog=AdventureWorks2008R2;" + 
        @"Integrated Security=true;"; 
 
} 
 
 

3. 接続ボタンのクリック イベントでは ComboBox で選択された値を基にプロバイダーのインスタンスを DbProviderFactories.GetFactory メソッド を用いて作成し、DbConnection, DbDataAdapter, DbCommand クラスを用いて接続、ロジックの実行を行います。

C#
private void button1_Click(object sender, EventArgs e) 
{ 
    // 選択されたプロバイダ ファクトリを作成 
    DbProviderFactory dpf = DbProviderFactories.GetFactory(this.comboBox1.SelectedValue.ToString()); 
 
    using (DbConnection dcon = dpf.CreateConnection()) 
    { 
        dcon.ConnectionString = this.textBox1.Text; 
        dcon.Open(); 
 
        // TableAdapter, Commandの定義 
        using (DbDataAdapter dda = dpf.CreateDataAdapter()) 
        using (DbCommand dbc = dpf.CreateCommand()) 
        { 
            // vEmployee ビューを取得 
            dbc.CommandText = "SELECT * FROM [HumanResources].[vEmployee]"; 
            dbc.Connection = dcon; 
            dda.SelectCommand = dbc; 
 
            DataTable dt = new DataTable(); 
            dda.Fill(dt); 
 
            // DataGridView で表示 
            this.dataGridView1.DataSource = dt; 
        } 
        dcon.Close(); 
    } 
} 
 
 

SqlClient Data Provider を選択して実行ボタンを押した結果は下記の通りです。

図 2

他のプロバイダーを選択する場合は接続文字列を変更する必要がありますが、その後の処理については汎用的な記述が可能になります。

関連リンク


Code Recipe

ページのトップへ