ASP에서 개발자들이 작성하는 데이터 액세스 코드에 대해 일관성을 유지시키며, 웹 애플리케이션에 최적의 성능을 제공해주도록
작성된 ASP용 클래스 컴포넌트를 말한다.
DB Access Framework를 사용해서 데이터 액세스 코드를 작성할 때 얻을 수 있는 장점은 다음과 같다.
● 코드의 일관성이 보장된다. 개발자들에 따라서 각기 다른 코드를 작성하던 것이 단일한 패턴으로 작성된다.
● DB Access Framework는 VBScript Class로 작성되어 사용하기 간편하다.
● 웹 애플리케이션 상에서 ADO 코딩 패턴에 맞는 튜닝 요소들을 강제한다. 즉, Disconnected 레코드셋, Client-side 커서, Static 커서 등의 사용이 적용된다.
● 직접 Connection 및 Command 개체를 핸들링하지 않아도 되므로 코드가 깔끔해진다.
● 매개변수화된 쿼리(Parameterized Query), 저장 프로시저 호출, Output 매개변수 다루기 등을 매우 간편하게 수행할 수 있다.
● 필요에 따라 얼마든지 DB Access Framework를 확장할 수 있다.
● 단일 Framework를 통해서 데이터 액세스를 수행하므로 코드 상의 문제점을 격리시키는 효과가 있다.
이는 서버 사이드 인클루드로서 별도의 설치나 등록없이 바로 사용할 수 있다. 웹 어플리케이션에 올려두고 필요한
ASP 페이지에서 다음과 같은 코드로 인클루드 하여 사용하면 된다.
<!--#include File="DBHelper.asp"-->
생성 방법은 일반적인 클래스 인스턴스를 만드는 것과 동일하다. 사용이 끝나면 Nothing을 줘서 해제시키는 것 역시 동일하다.
Set DBHelper = new clsDBHelper … Set DBHelper = Nothing
DBHelper에서 제공되는 메서드와 속성은 다음과 같다. 각 멤버의 세부적인 설명 및 매개변수는 각 멤버에 해당하는 절을 참고하기 바란다.
접근자 속성/메서드명 설명
Public ExecSPReturnRS 저장프로시저를 실행하고 레코드셋 개체를 반환한다.
ExecSQLReturnRS SQL문을 실행하고 레코드셋 개체를 반환한다.
ExecSP 저장프로시저를 실행한다. (레코드셋 반환하지 않음)
ExecSQL SQL문을 실행한다. (레코드셋 반환하지 않음)
BeginTrans 트랜잭션을 시작하고, Connection 개체를 반환한다.
CommitTrans 활성화된 트랜잭션을 커밋한다.
RollbackTrans 활성화된 트랜잭션을 롤백한다.
MakeParam 매개변수로 사용할 배열을 만든다.
GetValue 매개변수 배열에서 특정 매개변수의 값을 가져온다.
DefaultConnString 기본 연결 문자열
Dispose 내부의 DefaultConnection을 닫고, 메모리에서 해제한다.
Private collectParams 매개변수 배열을 Parsing하여 Parameter 개체를 생성한 후 Command 개체에 추가한다.
저장 프로시저를 실행하고 레코드셋 개체를 반환한다.
Function ExecSPReturnRS(spName, params, connectionString)
spName : 실행할 저장 프로시저 이름
params : 매개변수 값의 배열
connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.
다음과 같이 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
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
저장 프로시저를 실행하지만, 레코드셋 개체를 반환하지 않는다.
Sub ExecSP(spName, params, connectionString)
● spName : 실행할 저장 프로시저 이름
● params : 매개변수 값의 배열
● 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
SQL 문을 실행하지만, 레코드셋 개체를 반환하지 않는다. 주로 Insert/Update/Delete 쿼리 수행 시에 사용한다.
Sub ExecSQL (strSQL, params, connectionString)
● strSQL : 실행할 SQL문
● params : 매개변수 값의 배열
● 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
Connection을 Open하고, 새로운 ADO 트랜잭션을 시작한 후 트랜잭션을 시작한 Connection 개체를 반환한다.
Function BeginTrans (connectionString)
● connectionString : 연결 문자열 또는 Connection 개체. Nothing이나 DBHelper 개체의 DefaultConnString 속성을 지정하면 기본 연결 문자열을 사용한다.
다음은 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
주어진 Connection 개체의 트랜잭션을 커밋한 후 Connection 개체를 닫고 Nothing 처리한다.
Sub CommitTrans (connectionObj)
l connectionObj : 트랜잭션을 시작한 Connection 개체. BeginTrans가 반환한 것을 사용한다.
1.1.1.2. 사용 예제
2.2.5.2에 있는 BeginTrans의 예제를 참조한다.
주어진 Connection 개체의 트랜잭션을 롤백한 후 Connection 개체를 닫고 Nothing 처리한다.
Sub RollbackTrans (connectionObj)
■ connectionObj : 트랜잭션을 시작한 Connection 개체. BeginTrans가 반환한 것을 사용한다.
2.3.7.2. 사용 예제
2.2.5.2에 있는 BeginTrans의 예제를 참조한다.
매개변수로 사용할 배열을 만든다
Function MakeParam(PName,PType,PDirection,PSize,PValue)
● PName : 매개변수의 이름
● PType : 데이터 타입으로 DataTypeEnum 값 중 하나
● PDirection : 매개변수의 종류로 ParameterDirectionEnum 값 중 하나
● PSize : 매개변수의 최대 길이(문자열 매개변수는 지정 필요)
● 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)
매개변수 배열에서 특정 매개변수의 값을 가져온다. 주로 저장 프로시저를 실행 한 후 Output 매개변수값을 가지고 올 때 사용한다.
Function GetValue(params, paramName)
● params : 매개변수 배열로 ExecXXXX 명령의 두번째 매개변수로 전달되는 것
● paramName : 값을 가져오고자 하는 매개변수의 이름
2.3.9.2. 사용 예제
2.2.1.2에 있는 ExecuteSPReturnRS의 예제를 참조한다.
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 ‘명시적으로 기본 문자열 사용
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
매개변수 배열을 Parsing하여 Parameter 개체를 생성한 후 Command 개체에 추가한다.
Function collectParams(cmd,,argparams)
● cmd: Command 개체
● argparams : 매개변수 배열로 ExecXXXX 명령의 두번째 매개변수로 전달되는 것
이 메서드는 private 메서드이므로 직접 사용하지는 않는다. 또한 메서드 내의 내용을 수정할 때는 주의하기 바란다.
작성자 : 안재우 (닷넥엑스퍼트 책임 컨설턴트)
첨부파일
댓글 ( 7)
댓글 남기기