본문 바로가기
데스크탑/.NET

Data Access Layer 로 Enterprise Library 5.0 의 Data Access Application Block(DAAB) 사용하기

by 브래드.권 2013. 5. 18.

 

 

 

Version 1.0

문서 이력

2013-05-18 최초 작성 Ver 1.0

 

 

보통 프로젝트를 시작할 때 N-Tier 로 구성하여 사용을 합니다.

Tier 는 Layer 라고도 할 수 있으며 보통 그 중 하나의 Layer 는 Data Access Layer 로 하여

데이터 접근하는 부분은 따로 구성하는 경우가 많습니다.

이 Layer 는 순수하게 ADO.Net 을 사용하여 DataReader, SqlConnection, SqlCommand 같은 기본 Sql 클래스들로 직접 구현하여 사용할 수도 있지만 Microsoft 에서는 엔터프라이즈 환경에서 보안, 트랜잭션, DB 접근 등의 기능을 손쉽게 사용할 수 있도록 Enterprise Library 를 제공합니다. 이는 patterns & practices 라는 그룹에서 만들어 배포하는 것 같네요.

 

2013-05-18 현재 Enterprise Library 6 가 Beta 로 제공되고 있으며, 이는 아직 안정 단계가 아니므로 저는 Enterprise Library 5.0 을 사용하여 간단한 예제를 만들어보려고 합니다.

 

일단, 비록 예전에 제공되던 SqlHelper 클래스로 된 예제이긴 하지만 ADO.Net 으로 코드 작성할 경우와 Data Access Application Block 응 사용하여 코드 작성할 경우의 차이점을 분석해 놓은 김태영(Taeyo) 님의 글이 있어 링크거니 한 번 읽어보시면 좋을 듯 합니다.

 

링크 : Taeyo.Net 강좌 중 Microsoft Data Access Application Block 에 대하여.. (중급)

 

 

 

순서

1. Enterprise Library 5.0 소스 다운로드

2. 빈 솔루션 추가 및 Enterprise Library 5.0 의 Data, Common Block 프로젝트를 솔루션에 추가

3. 솔루션에 Core 콘솔 응용프로그램 프로젝트 추가하고 Enterprise Library 의 Data, Common 프로젝트 참조 추가

4. Core 프로젝트에 ConnectionString 을 설정할 App.Config 추가

5. Program 클래스에 간단한 Stored Procedure 로 member 정보 조회하는 코드 작성

 

 

 

1. Enterprise Library 5.0 소스 다운로드

 

  Enterprise Library 5.0 은 MSDN 에서 검색하여 소스를 다운로드 받을 수 있습니다. (링크)

 

 

2. 빈 솔루션 추가 및 Enterprise Library 5.0 의 Data, Common Block 프로젝트를 솔루션에 추가

 

  Visual Studio 에서 빈 솔루션을 하나 추가하고 Enterprise Library 에 있는 Blocks 폴더의

  Common, Data 폴더 내 프로젝트를 빈 솔루션에 추가해 줍니다.

  

 

 

  저는 Visual Studio 2008 을 사용하여 빈 솔루션을 TestSolution 이라는 이름으로 만들고 EntLib

  폴더를 추가하여 Data,   Common 프로젝트를 추가했습니다.

 

 

 

 

3. 솔루션에 Core 콘솔 응용프로그램 프로젝트 추가하고 Enterprise Library 의 Data, Common 프로젝트 참조 추가

 

  이제 Core 라는 이름으로 콘솔 응용프로그램 프로젝트를 추가하고 Core 프로젝트에서

  Enterprise Library 를 사용하기 위해 Core 프로젝트에 Common, Data 이 두 프로젝트를 참조

  합니다.

 

 

 

 

4. Core 프로젝트에 ConnectionString 을 설정할 App.Config 추가

 

  ConnectionString 은 그냥 코드상에 변수로 사용할 수도 있지만 일반적으로 많이 사용하는

  Config 에 설정하여 사용하도록 App.Config 를 Core 프로젝트에 추가하고 ConnectionString 을

  추가합니다. 저는 TestCon 이라는 이름으로 Visual Studio 2008 설치시 같이 설치된

  SQLEXPRESS 에다 member 테이블을 만들어 사용했습니다.

 

 

 

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="TestCon" connectionString="Database=testDB;Server=WIN-F7DRS142MT5\SQLEXPRESS;uid=sa;pwd=1234" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

 

 

 

5. Program 클래스에 간단한 Stored Procedure 로 member 정보 조회하는 코드 작성

 

  이제 Enterprise Library 의 Data Access Application Block 을 사용하기 위한 준비는 다 되었습니다. DB 에 접속하여 데이터를 조회하는 코드를 작성해 보겠습니다. 이 예제에선 기본적으로 member 테이블 및 데이터, Stored Procedure 가 있다는 전제하에 작성했습니다.

 

<member 테이블 구조 및 데이터>

 

<Stored Procedure>

 

create proc spGetMemberInfo
 @ID varchar(20)
as
set transaction isolation level read uncommitted
set nocount on

select * from member where ID = @ID

 

 

<소스 코드>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;   //추가
using System.Data;                                  //추가
using System.Data.Common;                           //추가

namespace Core
{
    class Program
    {
        static void Main(string[] args)
        {
            string memberID = "0001";

            Database db = DatabaseFactory.CreateDatabase("TestCon");
            DbCommand dbCom = db.GetStoredProcCommand("dbo.spGetMemberInfo");

            db.AddInParameter(dbCom, "ID", DbType.String, memberID);

            DataSet ds = db.ExecuteDataSet(dbCom);
            DataTable dt = ds.Tables[0];

            if (dt.Rows.Count > 0)
            {
                DataRow row = dt.Rows[0];
                Console.WriteLine(String.Format("ID: {0}, Name: {1}, Age: {2}", row["ID"].ToString(), row["Name"].ToString(), row["Age"].ToString()));
            }
            else
            {
                Console.WriteLine("No Data.");
            }

            Console.WriteLine("Press Any Button..");
            Console.ReadKey(true);
        }
    }
}

 

<결과 화면 >