본문 바로가기

IT/ASP/ASP.NET

[ASP] Asp 데이터베이스 연동 - DNS

대부분의 데이터베이스들이 응용프로그램과 데이터베이스 간의 연동을 위해 ODBC를 제공한다.

IIS ASP에서의 데이터베이스 연동은 크게 DNS을 활용하는 방법과 OLEDB를 활용하는 방법이 있는데,

짧게나마 ASP를 공부하는 과정에선 DSN를 적용하여 MS SQL Server를 연동하였다.


IIS의 ASP페이지 데이터베이스 연동 방법에 대한 MS 기술문서 : 링크

상기 링크에서 MS Access, MS SQL Server, Oracle에 대한 다양한 설정 및 적용법을 확인할 수 있다.


Step by Step!


먼저, 제어판 → 관리도구  데이터 원본(ODBC)을 찾는다.

다음과 같이 '시스템 DSN' 탭에서 데이터 원본에 대한 DSN을 조작할 수 있다.

스크린샷은 본인이 MS SQL Server에 대한 DSN을 이미 추가한 상태이니 오해하지말것.


추가를 누른 뒤, 다음의 과정을 따른다.

다음의 과정은 DBMS에서 사용자 계정 추가 및 설정을 마친 후 진행한다.


1) 드라이버 선택 : 

SQL Server를 선택한다. 만약 타 DBMS를 사용한다면 DBMS에 맞는 드라이버를 선택해주어야함.

타 드라이버 선택시 다음의 절차는 변동될 수 있다.


2) 데이터베이스 원본 이름 및 서버 지정 : 

DSN으로 사용할 이름을 입력하고 서버는 (local)로 입력한다.

입력한 DSN이름은 코드 내에서 ODBC를 지정하는 DSN의 인자로 쓰이며,

만약 서버가 외부에 있다면 (local)이 아닌 외부IP주소 등을 입력해야할 것이다.


3) 데이터베이스 인증정보 설정

'사용자가 지정한 ID 및 암호 인증 사용'을 체크한 후, 로그인 ID와 암호를 입력한다.

입력한 ID와 암호는 코드 내에서 각각 UID, PWD의 인자로 사용한다.


4) 데이터베이스 선택

사용할 데이터베이스 명을 입력하고 다음 페이지를 그대로 둔 상태로 마침 버튼을 누른다.


5) 설정 종료 및 데이터 원본 테스트

모든 과정이 종료되면 DSN 추가 직전 입력한 정보로 데이터 원본으로의 연결을 테스트할 수 있다.

다음 스크린샷과 같이 테스트가 성공적으로 완료되었다면 DSN 설정이 올바르게 완료된 것이다.



DSN과 관련된 설정이 완료되었다.

이제 코드 내에서 DSN에 설정한 DSN명, ID, 암호만 인자로 넘겨주면 편리하게 데이터베이스로 연결할 수 있다.


프로그램 내에서 다음과 같이 코드를 작성하여 데이터베이스에서 데이터를 추출, 출력하도록 하자.

 <%

      Dim dbConCmd, SQLQuery, dbCon, rs, rsList, …


      dbConCmd= "DSN=SQLServer; Database=board; UID=test; PWD=1234;"

      SQLQuery = " SELECT * FROM member "


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

      Set rs = Server.CreateObject("ADODB.RecordSet")


      dbCon.Open dbConCmd

      rs.Open SQLQuery, dbCon

 %>

 <%

      IF (rs.BOF AND rs.EOF) THEN

           Response.Write("회원정보가 존재하지 않습니다.")

      ELSE

           rsList = rs.GetRows()

           FOR x=1 TO UBound(rsList, 2)

                FOR y=0 TO Ubount(rsList)

                     Response.Write( rsList( y, x ) )

                NEXT

           NEXT

      END IF

 %>


 … 변수 선언. 필요에 맞게 적절히 선언한다.

 … Connection개체를 통한 DB연결에 요구되는 인자 설정.
     DSN에서 설정했던 내용들을 입력하는 것을 볼 수 있다.

 … DB연결을 위한 Connection개체 생성.
 … 데이터를 받아오기 위한 RecordSet개체 생성.

 … 데이터베이스 연결.
 … 질의문과 Connection개체를 인자로 하여 요청 전송.


 … 리턴받은 데이터값이 존재하는지 판별.


 … RecordSet으로부터 2차원 배열의 형태로 데이터 반환.
 … Unbound함수에 인자로 2를 추가로 넘겨줌으로써
     행&열로 구성된 데이터에서 열을 우선기준으로 For문 적용.
     이후 칼럼 기준으로 For문을 적용함으로써 데이터 뽑음.
          ex: rsList( y,x ) = 반환된 데이터 중 y번째 인덱스에 
                                   해당하는 x번째 칼럼의 데이터값.

     좌측 코드에서 x를 0으로 설정하면 빈 열이 출력된다.
     RecordSet의 첫번째 열은 칼럼명인가, 인덱스 문제인가?