ASP

 

 

1.  질의문(SQL문) 실행하기

ADO(Active Data Object) 는 여러 형태의 데이터베이스를 사용할 수 있도록 ASP 에서 제공하는 인터페이스이다.

ADO는 ODBC(Open Database Connectivity ) 를 이용해서 MS-SQL 서버나 오라클, 엑세스와 같은 서버 데이터베이스를 

다룰 수 있도록 해준다.

 

ODBC 에서는 DSN(Data Source Name) 이라는 데이터 소스 이름을 지정하며, DSN 은 데이터베이스에 연결하는 데 필요한

정보를 모아서 설정해 놓은 것이다.  예를 들어 ADO 는 액세스 파일을 DSN 이라는 데이터베이스 정보를 이용하여 데이터를 읽어오거나

추가, 삭제 등의 기능을 수행할 수 있다.

 

ADO 는 데이터베이스를 다양하게 사용할 수 있도록 많은 프로퍼티와 메서드를 제공하고 있다. 프로퍼티와 메소드를 간단히

정의하자면 객체가 작업할 수 있는 능력이며, 명령어라고 생각할 수 있는 일반적인 함수의 기능을 수행한다.  ADO 가 데이터베이스를

다루는 것이라면, 이 데이터베이스를 다루는 방법 즉,  데이터베이스를 연결하고 명령을 실행하고 실행 결과를 가져오는 방법

등을 정의해 놓은 것을 프로터티와 메소드라고 생각하면 된다.

 

 

ADO 객체가 수행하는 기본 과정과 구성은 다음과 같다.

1. 데이터베이스 연결(Connection 객체 사용)

 데이터베이스를 사용하기 위해서는 해당 데이터베이스의 접속하는 과정이 필요하다.

 

2. 명령 실행(Connection  객체의 Execute 메소드나 Command 객체 사용)

데이터베이스와 연결 후 질의문, 테이블 이름, 저장 프로시저 등의 명령을 실행한다.

예를 들면, 데이터베이스를 연결한 후  SQL 문을 사용하여 데이터를 추가, 삭제하는 명령어를 실행하는 부분이다.

 

3. 실행 결과(Recordset 객체 사용)

명령어를 실행한 결과는 레코드 셋 형태의 데이터이며 이 결과 값을 사용한다. 실제로 이용하는 값은 각 레코드가 가진 필드 값이다.

 

참고  :

레코드 셋(RecordSet) 이란 하나 이상의 레코드를 가진 레코드의 집합이다. 액세스 에서도  SQL 문을 실행하여 추출한 결과를

레코드 셋 형태로 가지고 있다.

 

 

 2.  Connection 객체를 사용한 질의문 실행법

Connecttion 객체는 ADO 객체가 제공하는 데이터베이스 연결 방법으로 다음과 같은 코드 내용을 삽입하여 Connection 객체를 

생성한다.

 

형식은 다음과 같다.

 

<%

      

      Set DbConn =Server.CreateObject("ADODB.Connection")

 

%>

 

 

Connection 객체의 사용은 같은 데이터를 여러 페이지에서 사용할 경우에, 필요할 때마다 생성하는 것이 아니라 미리 생성한

다음 이것을 객체 변수로 저장하여 필요한 페이지에서 이 변수 값을 사용하면 많은 작업이 줄일 수 있다. 이 변수는  애플리케이션

변수나 세션 변수로 사용할 수도 있다.

 

- 예 - 세션 변수로 사용한 경우

<%

  Set DbConn =Server.CreateObject("ADODB.Connection")

  Set  Session("DbConn")  = DbConn

%>



 

 

 

 

(1) Connection 객체의 구성 요소

 

Open   -   데이터 소스에 연결을 시도한다.

Close   -  데이터 연결을 종료한다.

Execute  - 쿼리, 저장 프로시저를 실행한다.

BeginTrans  - 새로운 트랜잭션을 시작한다.

CommitTrans  - 수정 내용을 저장하고 트랜잭션을 종료한다.

RollBackTrans - 수정 내용을 취소하고 트랜잭션을 종료한다.

 

ConnectString - 데이터 소스  연결을 생성하는 데 필요한 정보

Attributes - 기존 트랜잭션을 끝났을 때 새로운 트랜잭션의 실행을 제어한다.

CommandTimeOut - 명령을 시도한 후 대기하는 시간(초단위)

ConnectionTimeOut - 연결을 시도한 후 다음 연결 때까지 기다리는 시간(디폴트 값은 30초)

 

 

(2) Open 메서드 사용하기

Connection 객체를 생성한 후 데이터베이스에 연결하려면 데이터베이스를 열어야 한다.

데이터베이스를 열기 위해서는 Conneciton 객체에서 제공하는 Open 메서들 사용하여야 한다.

형식은 다음과 같다.

 

연결 객체 변수. Open ConnectionString,      User,     PassWord

 

인자를 설명하면 다음과 같다.

 

ConnectionString   - 데이터 소스 이름(ODBC 에서 지정한 DSN) 혹은 데이터 소스를 나태내는 문자열

(연결 문자열 ) 

User  -   사용자(보안 필요시)

Password  - 패스워드(보안 필요시)

 

ConnectionString(연결 문자열) 에서 지정할 수 있는 정보는 다음과 같다.

Provider  :  생략하면 ODBC 에 대한 기본적인 OLE-DB 제공자를 사용

Driver  :  Access 와 SQL 과 같은 데이터베이스의 드라이버 정보

Server  :  데이터베이스와 연결할 서버의 이름

DSN  : ODBC 의 데이터 소스 이름 ( Data Source Name)

Database 또는 DBQ  : 실제 데이터베이스의 이름

 

 

DSN 을  이용하여 데이터베이슬 연결한 후  Open 메서드를 사용하여 연결 문자열을 지정하여 데이터비에슬 연다.

<%

         Set  DbConn =Server.CreateObject("ADODB.Connection")

         DbConn.Open "DSN=owli; User=sa; Password="

%>

 

 

참고 : 연결 문자열 지정 부분에서 다른 표현들

* 연결 문자열 먼저 지정하고  연결을 시도한 경우

<%

       Set DbConn = Server.CreateObject("ADODB.Connection")

        DbConn.ConnectionString =  "DSN=owl1;  User=sa; Pasword="

%>

 

* 연결 문자열, 사용자, 암호 지정을 한 경우

<%

     Set DbConn =Server.CreateObject("ADODB.Connection")

     DbConn.Open  "DSN=owl1", "sa", "패스워드"

%>

 

* DNS 만 지정한 경우

<%

       Set DbConn =Server.CreateObject("ADODB.Connection")

       DbConn.Open  "owl1"

%>



 

 

 

(3) Execute 메서드 사용하기

Connection 객체를 생성하고, 데이터베이스를 연 후에 이 데이터베이스를 이용할 수 있도록 명령을 실행하려면 Execute 메서드를

사용하면 된다. Execute 메서들 사용하여 수행할 수 있는 명령어에는 SQL 문, 테이블 이름, 저장 프로시저가 있다.

 

형식은 다음과 같다.

연결 객체 변수 . Excute CommandText, RecordsAffected, Options

 

인자 설명은 다음과 같다.

 

CommandText  : 세 가지 명령형 중 실행할 문자열 (예 : SQL 명령문인 경우  Select * from Products " )

RecordsAffected  : 영향 받은 레코드 수

Options  : 명령형 지정

 

Options 에서 지정할 수 있는 명령형은 다음과 같다.

adCmdText - SQL 문장과 같은 텍스트 명령어 저의  (상수 값 : 1 )

adCmdTable - 레코드 셋을 생성할 테이블 이름 (상수 값 : 2 )

 

adCmdStoredProc  - 데이터 소스 내의 저장 프로시저 (상수 값 : 3)

 

참고 :

옵션을 지정하지 않는 경우 ADO 객체는 현재 실행할 문자열이 어떤 종류에 속성하는 명령문인지 모르기 때문에 데이터

소스에서 알아본 후 실행한다. 이 과정을 없애려면 옵션 지정을 해야 한다.

 

참고

앞에서 사용한 옵션에서 adCmdText 나  adCmdTable 들은 ADO 상수이다. 이런 ADO 상수를 페이지에서 사용할 경우에는 Adovbs.inc

파일을 Include 하여야 한다. 

<!-- #include file="Adovbs.inc"  --> 라고 해당 페이지에 기입하거나 상수값 (adCmdText 인 경우 1) 을 바로 사용하면 된다.

 

 

예  - SQL 명령문 사용 시 옵션을 주지 않고 실행한 경우

 

<%

        Set DbConn = Server.CreateObject("ADODB.Connection")

        DbConn.Open "owl1"

         DbConn.Execute  "  Select * From Member Where Name = '김%'

%>

 

 

참고

저장 프로시저(Stored Procedure) 란 데이터베이스 시스템에서 미리 정의한 명령어를 모아둔 프로시저이다. 예를 들어

액세스에서 사용하는 쿼리 같은 것이다.

 

예 -

 

<%

     dim dbConnect, db '변수 선언
     ' DB 연결 접속 정보 변수 저장
     dbConnect = "Provider=SQLOLEDB; Data Source=NITRO-PC\SQLEXPRESS;Initial Catalog=macaronics; User id=braverokmc;password=1111"
     ' 연결 객체 생성
     set db = server.createObject("ADODB.Connection")
     ' 데이터베이스 접속
     db.open dbConnect



     ' 
     ' sql="select * from usert where id=1 "
     ' Set RS = db.Execute(sql)
     '
     ' Response.write RS("name")



%>

 

 

 

(4) Close 메서드로 연결 끊기

 

데이터베이스 사용이 끝나면 Close 메서드를 사용하여 연결을 닫아주어야 한다. 객체를 닫고 난 후에는 연결 객체 변수에 Nothing을

지정해서 객체가 사용한 모든 리소스를 제거해준다.


 

<%

   DbConn.close

  Set  DbConn =Nothing

%>



 

 

 

(5) 데이터 보호하기

데이터베이스를 열어 명령 수행할 경우에 실행 중 오류가 발생하여 기존의 데이터베이스를 보존하지 못하는 경우가 있다.

수정 명령을 수행 도중 중간에 작업이 끝나는 경우, 일부 데이터는 바뀌고 일부 데이터는 그대로 남아 있는 경우이다.

 

원하는 데이터를 모두 바꾸던지 원래 상태 데이터를 보존해야 하는 '데이터 무결성'  보장하기 위해 Connection 객체에서는

트랜잭션이라는 메서드를 제공하고 있다.

 

트랜잭션 메서드를 사용하여 데이터를 처리한 후 오류 없이 정상적으로 명령이 수행되었다면 수정된 데이터를 저장하고, 

오류가 발생하면 수정된 모든 데이터 변경을 수정 전으로 환원한다.

 

BeginTrans 메서드를 사용하여 트랜잭션을 시작한 후 오류 확인을 하여 오류가 발생하지 않으면 CommitTrans 메서드를 사용하여

바뀐 데이터를 저장하고, 만약 오류가 발생한다면 RollBackTrans 메서드를 사용하여 바뀐 데이터의 저장을 취소하고 원래 상태로

모든 데이터를 되돌린다.

 

<%
  .....  

   생략

    DbConn.BeginTrans
    objRs.("name") ="홍길동"

    objRs.update
    If Dbconn.ErrobjRs = 0 Then
            DbConn.CommiTrans
    Else
            DbConn.RollBackTrans
    Endif
                    
%>

 

 

 

3.  Command 객체를 사용한 질의문 실행법

 

명령어를 처리하기 위해서는 Connection 객체를 사용할 수도 있지만 Command 객체를 사용하는 경우도 있다. Command 객체는

ActiveConnection 프로퍼티를 이용하여 데이터베이스에 연결하며, Execute 메소드를 사용하여 명령문을 실행한다.

 

1) Command 객체의 구성요소

Excute  -  SQL 명령이나 저장 프로시저를 실행

CreateParameter  -  Parameters 콜렉션에서 새로운 Parameter 객체 생성

ActiveConnection -  Command 객체에서 사용하는 Connection 객체

CommandTimeout - 명령 실행을 처리되는 동안 기다리는 시간 (디폴트 값 : 30 초)

CommandText - 실행할 명령 문자열

CommandType  - 명령 타입 지정

Prepared - 실행하기 전 SQL 문의 컴파일 여부

 

(2) 데이터베이스 연결하기

Command 객체를 사용하기 위해서 ActiveConnection 프로퍼티를 지정한다.

<%


      Set Dbconn  =Server.CreateObject("ADODB.Connection")
      Set DbCmd =Server.CreateObject("ADODB.Command")
      DbCmd.ActiveConnection =DbConn
      

%>

 

Connection 객체가 없는 경우 연결 문자열을 사용한 경우

<%

    Set DbCmd =Server.CreateObject("ADODB.Command")
    DbCmd.ActiveConnection="DSN명"

%>

 

 

(3) SQL문 실행하기

ActiveConnection 연결 설정을 하면 데이터베이스 연결이 자동으로 처리되므로 별도로 Connection 객체에서처럼 별도로 데이터베이스를

여는 과정을 거치지 않고 명령어를 처리할 수 있다.

 

Command 객체는 프로퍼티를 미리 지정하여 사용할 수 있으며 임시로 SQL 문을 지정할 수 있어 계속적인 질의문을 실행할 경우 편리하게

사용할 수 있다.

 

프로퍼티 내용은 다음과 같다.

 

CommandText 프로퍼티  : Excute 메서드를 사용할 때 실행할 SQL 문이나 저장 프로시저 문자열을 지정한다.

CommandType 프로퍼티 : CommandText 에서 지정한 명령문에 따라 명령형을 지정한다.

Prepred 프로퍼티 : 주어진 명령 문자열을 미리 컴파일할 것인지 지정한다.

 

  <%

     Set DbCmd =Server.CreateObject("ADODB.Command")
     DbCmd.ActiveConnection ="macaronics"
     DbCmd.CommandText="drop table product"
     Dbcmd.CommandType=adCmdText
     DbCmd.Prepared =true
     DbCmd.Execute
     Set DbCmd.ActiveConnection=Nothing

  %>

 

 

 

출처 : 

ASP 쇼핑몰 제작 프로젝트따라하기

OWL 연구소 지음 

제작  소스 - Junho  choi  - macaronics  : https://github.com/braverokmc79/asp-shoppingMall

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

위대한 예술가는 그의 영혼에 응답하는 영혼의 소리를 도처에서 듣는 법입니다. 이 이상 종교적인 사람이 어디 있겠습니까? -로댕

댓글 ( 4)

댓글 남기기

작성