いろいろ備忘録日記

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

ADO.NET入門記-001 (コネクションの確立及び解放)

現在ADO.NET 2.0を勉強しているので、その過程をちょこちょこメモしていこうと
思っております。見た目は簡単ですが、やってみると結構ややこしいADO.NET絡み。
実務では必須の知識になるので、いろいろメモしていきたいなと思います。


今回は、もっとも基本のコネクションの確立と解放について。
ADO.NET 2.0では、1.1と違いIDbConnectionの抽象実装が追加されています。
それが、

System.Data.Common.DbConnection

です。
この他にも、System.Data.Common名前空間には各クラスのabstractクラスが
用意されています。つまり、これを利用すると、ある程度はデータプロバイダに
依存しないコードが記述できます。


その上、http://d.hatena.ne.jp/gsf_zero1/20070811/p1 でも記述しているように
2.0からはファクトリクラスが導入されています。


以下サンプルです。
単純にデータベースへの接続を開いてすぐ解放しています。
ファクトリクラス及びabstractクラスを用いているので実際の固有クラス(System.Data.SqlClient.SqlConnection)
などが出現して来ていない事が特徴です。


以下のデータベースを今回作成しています。

  • データソース
  • データベース名
    • adonet_sample_db
  • 認証方法
    • Windows認証(Integrated Security)
using System;
using System.Data;
using System.Data.Common;

using NUnit.Framework;

using Gsf.Lib.UnitTests;

namespace Gsf.Samples.AdoNet {

    [TestFixture()]
    public class AdoNetSample002 : TestBase{

        [Test()]
        public void TestCreateConnectionAndOpenConnection(){

            DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
            using(DbConnection conn = factory.CreateConnection()){
                //
                // 接続文字列の設定
                //
                conn.ConnectionString = CreateConnectionString(factory);
                //
                // 接続の確立
                //
                conn.Open();

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

        [Test()]
        public void TestReleaseConnection(){

            DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");

            DbConnection conn = null;
            try{
                conn                  = factory.CreateConnection();
                conn.ConnectionString = CreateConnectionString(factory);

                conn.Open();

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

            }finally{
                if(conn != null){
                    conn.Close();

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

        private string CreateConnectionString(DbProviderFactory factory) {
            //
            // 次のような接続文字列を作成する。
            //     Data Source=localhost\SQLEXPRESS;Initial Catalog=adonet_sample_db;Integrated Security=True
            //
            DbConnectionStringBuilder builder = factory.CreateConnectionStringBuilder();

            //
            // データソースの設定
            //
            builder.Add("Data Source", "localhost\\SQLEXPRESS");

            //
            // 初期カタログの設定 (読み込まれるデータベースの指定。つまりデータベース名の指定)
            //
            builder.Add("Initial Catalog", "adonet_sample_db");

            //
            // Windows認証を行なってログインする場合は、以下のように設定。
            //
            builder.Add("Integrated Security", "True");

            return builder.ConnectionString;
        }
    }
}


上記のサンプルでも接続は開けているのですが、通常はやはりapp.configファイルなどに
接続文字列は記述して、そこから読み取るのが多いです。


次は、設定ファイルより接続文字列を読み取って接続を生成するやり方を記述してみます。