読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

ADO.NET入門記-002 (ConnectionStringSettingsを用いて接続文字列を取得)


ADO.NET 2.0より、System.Configuration名前空間に以下のクラスが追加されています。

System.Configuration.ConfigurationManager

このクラスは、マシン構成情報(machine.config)とアプリケーション構成情報(app.config)にアクセスする事が
出来るクラスです。このクラスを用いるとapp.configに定義されているConnectionStrings要素の値を取得することが
出来ます。


app.config内に以下のように設定している場合

<connectionStrings>
    <add name="AdoNetSampleDB"
            connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=adonet_sample_db;Integrated Security=True"
            providerName="System.Data.SqlClient"/>
</connectionStrings>

以下のようにして取得することが出来ます。

ConfigurationManager.ConnectionStrings["AdoNetSampleDB"].ConnectionString


また、app.configはVisualStudioにより自動生成されるファイルでもあります。
VisualStudioのGUIツールを使って接続文字列を定義した場合は、以下の命名規則でname属性の値が設定されます。
上記と同じようにしてGUIよりAdoNetSampleDBというキーを設定した場合は、

プロジェクトの基底の名前空間.Properties.Settings.AdoNetSampleDB

という名前になります。このセクションの値は以下のようにして取得できます。

Properties.Settings.Default.AdoNetSampleDB

Settingsクラスを利用した方が楽といえば、楽です。


以下サンプルです。
また、予め以下のようにapp.configが設定されているとします。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="Gsf.Samples.AdoNet.Properties.Settings.AdoNetSampleDB"
            connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=adonet_sample_db;Integrated Security=True"
            providerName="System.Data.SqlClient" />
        <add name="AdoNetSampleDB"
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=adonet_sample_db;Integrated Security=True"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>
using System;
using System.Data;
using System.Data.Common;
using System.Configuration;

using NUnit.Framework;

using Gsf.Lib.UnitTests;

namespace Gsf.Samples.AdoNet {

    [TestFixture(Description="ConnectionStringSettingsクラスを用いてコネクションを作成するテスト")]
    public class AdoNetSample003 {

        [Test()]
        public void ConnectionStringSettingsを用いて接続文字列情報が取得できるかどうかの確認(){
            //
            // アプリケーション構成ファイルに設定されている接続文字列を取得
            //
            // 該当するapp.configのConnectionStrings要素内のデータを取得する。
            ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[".AdoNetSampleDB"];            
            Assert.IsNotNull(settings);

            //
            // 接続文字列を取得
            //
            string connectionString = settings.ConnectionString;

            Assert.AreEqual(Properties.Settings.Default.AdoNetSampleDB, settings.ConnectionString);
        }

        [Test()]
        public void VisualStudioにより自動生成されるSettingsクラスより接続文字列の値を取得してみるテスト(){
            //
            // VisualStudioを利用している場合は、プロジェクトを右クリック⇒設定タブをクリック⇒接続文字列を設定
            // とすると、自動的にapp.configとSettingsクラスが生成されます。
            //
            // Settingsクラスは, app.configの内容をバインディングしているクラスです。
            // これらを利用しても同じことになります。
            //
            string connectionString = Properties.Settings.Default.AdoNetSampleDB;
            Assert.IsFalse(string.IsNullOrEmpty(connectionString));

            Assert.AreEqual(
                ConfigurationManager.ConnectionStrings[Properties.Settings.Default.GetType().FullName + ".AdoNetSampleDB"].ConnectionString, 
                connectionString
            );
        }

        [Test()]
        public void ConfigurationManagerを利用して接続文字列を取得しConnectionを確立してみるテスト(){
            //
            // ConnectionSettings情報を取得
            //
            ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["AdoNetSampleDB"];
            Assert.IsNotNull(settings);

            //
            // コネクションを確立
            //
            DbProviderFactory factory = DbProviderFactories.GetFactory(settings.ProviderName);
            using(DbConnection conn = factory.CreateConnection()){

                conn.ConnectionString = settings.ConnectionString;
                conn.Open();

                Assert.AreEqual(ConnectionState.Open, conn.State);
            }
        }
    }
}