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); } } } }