본문 바로가기

프로그램&DB/C#

안재우님의 ASP DBHelper Class 설명


DB Access Framework

for ASP & ADO

 

 

작성자 : 안재우 (닷넥엑스퍼트 책임 컨설턴트)

lancers@dotnetxpert.com

 

      

 

1.    개요.. 4

1.1.         DB Access Framework이란?. 4

1.2.         DB Access Framework 장점.. 4

2.    사용법.. 5

2.1.         DBHelper 등록.. 5

2.2.         DBHelper 생성.. 5

2.3.         DBHelper 멤버.. 5

2.3.1.       ExecSPReturnRS. 5

2.3.1.1.    설명.. 5

2.3.1.2.    사용 예제.. 6

2.3.2.       ExecSQLReturnRS. 7

2.3.2.1.    설명.. 7

2.3.2.2.    사용 예제.. 7

2.3.3.       ExecSP. 7

2.3.3.1.    설명.. 7

2.3.3.2.    사용 예제.. 7

2.3.4.       ExecSQL. 8

2.3.4.1.    설명.. 8

2.3.4.2.    사용 예제.. 8

2.3.5.       BeginTrans. 8

2.3.5.1.    설명.. 8

2.3.5.2.    사용 예제.. 8

2.3.6.       CommitTrans. 9

2.3.6.1.    설명.. 9

2.3.6.2.    사용 예제.. 9

2.3.7.       RollbackTrans. 9

2.3.7.1.     설명.. 9

2.3.7.2.     사용 예제.. 9

2.3.8.       MakeParam.. 9

2.3.8.1.    설명.. 9

2.3.8.2.    사용 예제.. 9

2.3.9.       GetValue. 10

2.3.9.1.    설명.. 10

2.3.9.2.    사용 예제.. 10

2.3.10.     DefaultConnString. 10

2.3.10.1.     설명.. 10

2.3.10.2.     사용 예제.. 10

2.3.11.     Dispose. 10

2.3.11.1.     설명.. 10

2.3.11.2.     사용 예제.. 10

2.3.12.     collectParams. 11

2.3.12.1.     설명.. 11

 

 

1.            개요

1.1.    DB Access Framework이란?

ASP에서 개발자들이 작성하는 데이터 액세스 코드에 대해 일관성을 유지시키며, 애플리케이션에 최적의 성능을 제공해주도록 작성된 ASP 클래스 컴포넌트를 말한다.

1.2.    DB Access Framework 장점

DB Access Framework 사용해서 데이터 액세스 코드를 작성할 얻을 있는 장점은 다음과 같다.

l         코드의 일관성이 보장된다. 개발자들에 따라서 각기 다른 코드를 작성하던 것이 단일한 패턴으로 작성된다.

l         DB Access Framework VBScript Class 작성되어 사용하기 간편하다.

l         애플리케이션 상에서 ADO 코딩 패턴에 맞는 튜닝 요소들을 강제한다. , Disconnected 레코드셋, Client-side 커서, Static 커서 등의 사용이 적용된다.

l         직접 Connection Command 개체를 핸들링하지 않아도 되므로 코드가 깔끔해진다.

l         매개변수화된 쿼리(Parameterized Query), 저장 프로시저 호출, Output 매개변수 다루기 등을 매우 간편하게 수행할 있다.

l         필요에 따라 얼마든지 DB Access Framework 확장할 있다.

l         단일 Framework 통해서 데이터 액세스를 수행하므로 코드 상의 문제점을 격리시키는 효과가 있다.

 

2.            사용법

2.1.    DBHelper 등록

이는 서버 사이드 인클루드로서 별도의 설치나 등록없이 바로 사용할 있다. 어플리케이션에 올려두고 필요한 ASP 페이지에서 다음과 같은 코드로 인클루드 하여 사용하면 된다.

<!--#include File="DBHelper.asp"-->

2.2.    DBHelper 생성

생성 방법은 일반적인 클래스 인스턴스를 만드는 것과 동일하다. 사용이 끝나면 Nothing 줘서 해제시키는 역시 동일하다.

Set DBHelper = new clsDBHelper

Set DBHelper = Nothing

2.3.    DBHelper 멤버

DBHelper에서 제공되는 메서드와 속성은 다음과 같다. 멤버의 세부적인 설명 매개변수는 멤버에 해당하는 절을 참고하기 바란다.

접근자

속성/메서드명

설명

Public

ExecSPReturnRS

저장프로시저를 실행하고 레코드셋 개체를 반환한다.

ExecSQLReturnRS

SQL문을 실행하고 레코드셋 개체를 반환한다.

ExecSP

저장프로시저를 실행한다. (레코드셋 반환하지 않음)

ExecSQL

SQL문을 실행한다. (레코드셋 반환하지 않음)

BeginTrans

트랜잭션을 시작하고, Connection 개체를 반환한다.

CommitTrans

활성화된 트랜잭션을 커밋한다.

RollbackTrans

활성화된 트랜잭션을 롤백한다.

MakeParam

매개변수로 사용할 배열을 만든다.

GetValue

매개변수 배열에서 특정 매개변수의 값을 가져온다.

DefaultConnString

기본 연결 문자열

Dispose

내부의 DefaultConnection 닫고, 메모리에서 해제한다.

Private

collectParams

매개변수 배열을 Parsing하여 Parameter 개체를 생성한 Command 개체에 추가한다.

2.3.1.    ExecSPReturnRS

2.3.1.1.                       설명

저장 프로시저를 실행하고 레코드셋 개체를 반환한다.

Function ExecSPReturnRS(spName, params, connectionString)

l         spName : 실행할 저장 프로시저 이름

l         params : 매개변수 값의 배열

l         connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.

2.3.1.2.                       사용 예제

다음과 같이 2개의 Input 매개변수(@Beginning_Date, @Ending_Date) 1개의 Output 매개변수(@RecordCount) 가지는 저장 프로시저가 있다고 가정하자.

테스트용 SP

Create procedure TestSP2

             @Beginning_Date DateTime,

@Ending_Date DateTime,

@RecordCount int output

AS

SELECT Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal,

DATENAME(yy,ShippedDate) AS Year

FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID

WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date

 

SELECT @RecordCount = @@rowcount

이를 호출하는 코드는 다음과 같다. 매개변수 배열을 만들기 위해 DBHelper MakeParam 메서드를 사용하고 있는 것과 Output 매개변수 값을 읽어오기 위해 GetValue 메서드를 사용하고 있는 것에 주의한다. 추가로 DB Access Framework 내에서는 Disconnected 레코드셋을 사용하므로, 레코드셋을 닫기 전에 Output 매개변수값을 읽어오는 것도 가능하다.

Set DBHelper = new clsDBHelper     'DBHelper 생성

RecordCount = 0        '전체 레코드 개수

 

'매개변수 배열 준비

Dim paramInfo(2)

paramInfo(0) = DBHelper.MakeParam("@Beginning_Date",adDate,adParamInput,0, "1998/01/01")

paramInfo(1) = DBHelper.MakeParam("@Ending_Date",adDate,adParamInput,0, "1998/03/01")

paramInfo(2) = DBHelper.MakeParam("@RecordCount",adInteger,adParamOutput,,0)

'paramInfo(0) = DBHelper.MakeParam("@Beginning_Date",7,1,0, "1998/01/01")

'paramInfo(1) = DBHelper.MakeParam("@Ending_Date",7,1,0, "1998/03/01")

'paramInfo(2) = DBHelper.MakeParam("@RecordCount",3,2,,0)

 

'SP 실행하고 레코드셋을 반환한다.

' 마지막 매개변수가 Nothing이면 기본 연결문자열 사용

Set rs = DBHelper.ExecSPReturnRS("TestSP2", paramInfo, Nothing)

 

'레코드셋 개체(rs) 작업을 수행….

 

'@RecordCount Output 매개변수값 읽어오기

recordCount = DBHelper.GetValue(paramInfo, "@RecordCount"))

 

rs.Close

 

Set rs = Nothing

 

DBHelper.Dispose

Set DBHelper = Nothing

2.3.2.    ExecSQLReturnRS

2.3.2.1.                       설명

SQL 문을 실행하고 레코드셋 개체를 반환한다. 주로 Select 쿼리 수행 시에 사용한다.

Function ExecSQLReturnRS(strSQL, params, connectionString)

l         strSQL : 실행할 SQL

l         params : 매개변수 값의 배열

l         connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.

2.3.2.2.                       사용 예제

Set DBHelper = new clsDBHelper      'DBHelper 생성

 

'SQL 쿼리를 실행하고 레코드셋을 반환한다.

' 마지막 매개변수가 Nothing이면 기본 연결문자열 사용

Set rs = DBHelper.ExecSQLReturnRS("SELECT * FROM Products", Nothing, Nothing)

 

'레코드셋 개체(rs) 작업을 수행….

 

rs.Close

 

Set rs = Nothing

DBHelper.Dispose

Set DBHelper = Nothing

2.3.3.    ExecSP

2.3.3.1.                       설명

저장 프로시저를 실행하지만, 레코드셋 개체를 반환하지 않는다.

Sub ExecSP(spName, params, connectionString)

l         spName : 실행할 저장 프로시저 이름

l         params : 매개변수 값의 배열

l         connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.

2.3.3.2.                       사용 예제

@CustomerID라는 매개변수를 받아 Customers 테이블에서 삭제하는 RemoveCustomer라는 SP 있다고 가정하고, 이를 호출하는 코드는 다음과 같다.

Set DBHelper = new clsDBHelper      'DBHelper 생성

 

'매개변수 배열 준비

Dim paramInfo(0)

paramInfo(0) = DBHelper.MakeParam("@CustomerID",adChar,adParamInput,5, "ALFKI")

 

'SP 실행한다.

' 마지막 매개변수가 Nothing이면 기본 연결문자열 사용

DBHelper.ExecSP "RemoveCustomer", paramInfo, Nothing

 

DBHelper.Dispose

Set DBHelper = Nothing

2.3.4.    ExecSQL

2.3.4.1.                       설명

SQL 문을 실행하지만, 레코드셋 개체를 반환하지 않는다. 주로 Insert/Update/Delete 쿼리 수행 시에 사용한다.

Sub ExecSQL (strSQL, params, connectionString)

l         strSQL : 실행할 SQL

l         params : 매개변수 값의 배열

l         connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.

2.3.4.2.                       사용 예제

Set DBHelper = new clsDBHelper      'DBHelper 생성

 

'SQL 쿼리를 실행한다.

' 마지막 매개변수가 Nothing이면 기본 연결문자열 사용

DBHelper.ExecSQL("DELETE Customers WHERE customerID='ALFKI' ", Nothing, Nothing)

 

DBHelper.Dispose

Set DBHelper = Nothing

2.3.5.    BeginTrans

2.3.5.1.                       설명

Connection Open하고, 새로운 ADO 트랜잭션을 시작한 트랜잭션을 시작한 Connection 개체를 반환한다.

Function BeginTrans (connectionString)

l         connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.

2.3.5.2.                       사용 예제

다음은 BeginTrans, CommitTrans, RollbackTrans 사용하는 예제이다. BeginTrans 반환한 conn 개체를 ExecSQL, CommitTrans, RollbackTrans 전달하고 있다.

또한 SELECT 쿼리의 경우, 트랜잭션에 포함되면 테이블이 잠기는 현상이 발생하므로 트랜잭션에 포함하지 않도록 별도의 Connection 쓰고 있음에 유의한다(또는 쿼리에서 with nolock 키워드를 사용한다).

Set DBHelper = new clsDBHelper

 

'트랜잭션 시작

'Nothing이면 기본 연결문자열(DefaultConnString) 사용

Set conn = DBHelper.BeginTrans(Nothing)

 

'트랜잭션에 포함될 쿼리를 실행한다.

'마지막 매개변수로 BeginTrans에서 반환한 conn 쓴다.

DBHelper.ExecSQL "Update Customers ….", Nothing, conn

DBHelper.ExecSQL "Update Customers ….", Nothing, conn

 

'트랜잭션에 포함하지 않을 쿼리를 실행한다.

DBHelper.ExecSQL "SELECT ….", Nothing, Nothing

 

 

'특정 조건에 따라 커밋 또는 롤백 수행

If ….. Then

 

'커밋

DBHelper.CommitTrans conn

Else

'롤백

DBHelper.RollbackTrans conn

End If

 

Set DBHelper = Nothing

2.3.6.    CommitTrans

2.3.6.1.                       설명

주어진 Connection 개체의 트랜잭션을 커밋한 Connection 개체를 닫고 Nothing 처리한다.

Sub CommitTrans (connectionObj)

l         connectionObj : 트랜잭션을 시작한 Connection 개체. BeginTrans 반환한 것을 사용한다.

2.3.6.2.                       사용 예제

2.2.5.2 있는 BeginTrans 예제를 참조한다.

2.3.7.    RollbackTrans

2.3.7.1.                       설명

주어진 Connection 개체의 트랜잭션을 롤백한 Connection 개체를 닫고 Nothing 처리한다.

Sub RollbackTrans (connectionObj)

l         connectionObj : 트랜잭션을 시작한 Connection 개체. BeginTrans 반환한 것을 사용한다.

2.3.7.2.                       사용 예제

2.2.5.2 있는 BeginTrans 예제를 참조한다.

2.3.8.    MakeParam

2.3.8.1.                       설명

매개변수로 사용할 배열을 만든다.

Function MakeParam(PName,PType,PDirection,PSize,PValue)

l         PName : 매개변수의 이름

l         PType : 데이터 타입으로 DataTypeEnum 하나

l         PDirection : 매개변수의 종류로 ParameterDirectionEnum 하나

l         PSize : 매개변수의 최대 길이(문자열 매개변수는 지정 필요)

l         PValue : 매개변수의

2.3.8.2.                       사용 예제

Dim paramInfo(2)

paramInfo(0) = DBHelper.MakeParam("@Beginning_Date",adDate,adParamInput,0, "1998/01/01")

paramInfo(1) = DBHelper.MakeParam("@Ending_Date",adDate,adParamInput,0, "1998/03/01")

paramInfo(2) = DBHelper.MakeParam("@RecordCount",adInteger,adParamOutput,,0)

코드는 MakeParam 사용하는 대신 Array 함수를 사용할 수도 있다. Array 함수 사용 반드시 MakeParam 매개변수처럼 5개의 요소를 순서대로 선언해야 한다.

Dim paramInfo(2)

paramInfo(0) = Array("@Beginning_Date",adDate,adParamInput,0, "1998/01/01")

paramInfo(1) = Array("@Ending_Date",adDate,adParamInput,0, "1998/03/01")

paramInfo(2) = Array("@RecordCount",adInteger,adParamOutput,,0)

2.3.9.    GetValue

2.3.9.1.                       설명

매개변수 배열에서 특정 매개변수의 값을 가져온다. 주로 저장 프로시저를 실행 Output 매개변수값을 가지고 사용한다.

Function GetValue(params, paramName)

l         params : 매개변수 배열로 ExecXXXX 명령의 두번째 매개변수로 전달되는

l         paramName : 값을 가져오고자 하는 매개변수의 이름

2.3.9.2.                       사용 예제

2.2.1.2 있는 ExecuteSPReturnRS 예제를 참조한다.

2.3.10.                        DefaultConnString

2.3.10.1.                  설명

DBHelper ExecXXXX 명령 수행 시에 마지막 매개변수가 Nothing이면, 기본 연결 문자열을 사용한다. 기본 연결 문자열 값이 바로 DefaultConnString이다.

Sub Dispose()

2.3.10.2.                  사용 예제

Set DBHelper = new clsDBHelper

DBHelper.ExecSQL query1, Nothing, Nothing                               암시적으로 기본 문자열 사용

DBHelper.ExecSQL query2, Nothing, DBHelper.DefaultConnString   명시적으로 기본 문자열 사용

2.3.11.                        Dispose

2.3.11.1.                  설명

DBHelper 내부적으로 ExecXXXX 명령 수행 시에 마지막 매개변수가 Nothing이면, 기본 연결 문자열(DefaultConnString) 사용해서 DefaultConnection 개체를 만들어 , 명령 수행 시에는 개체를 사용하게 된다. 그래서 페이지를 종료부분에 Dispose 메서드를 호출하여 DefaultConnection 닫고 메모리에서 해제해야 한다.

Sub Dispose()

2.3.11.2.                  사용 예제

아래 코드에서는 Dispose 사용 예제를 보여준다. query1 수행할 DefaultConnection 생성되며, query2에서는 이를 그대로 사용한다. 그러나 다른 연결문자열을 사용하는 query3 경우 새로운 Connection 생성해서 사용하게 된다.

Set DBHelper = new clsDBHelper

DBHelper.ExecSQL query1, Nothing, Nothing       ‘DefaultConnection 생성, Open

DBHelper.ExecSQL query2, Nothing, Nothing          생성된 DefaultConnection 계속 사용

DBHelper.ExecSQL query3, Nothing, DBHelper.AnotherDB       새로운 Connection 개체 생성

 

DBHelper.Dispose                              ‘DefaultConnection 닫고, 해제

Set DBHelper = Nothing

2.3.12.                        collectParams

2.3.12.1.                  설명

매개변수 배열을 Parsing하여 Parameter 개체를 생성한 Command 개체에 추가한다.

Function collectParams(cmd,,argparams)

l         cmd: Command 개체

l         argparams : 매개변수 배열로 ExecXXXX 명령의 두번째 매개변수로 전달되는

메서드는 private 메서드이므로 직접 사용하지는 않는다. 또한 메서드 내의 내용을 수정할 때는 주의하기 바란다.

 

[출처] -  안재우님의 ASP DBHelper Class에 대한 설명입니다.