330 likes | 767 Views
11 장 . ASP 와 데이터 베이스. 1. ADO 객체 모델 2. DSN 과 데이터 베이스 연결 3. 레코드셋. 2. OLE DB 와 ADO. ADO 객체 OLE DB 제공자를 통해서 데이터를 다룸 OLE DB 프로그램에서 여러 형태의데이터를 다룰 수 있도록 제공된 컴포넌트 중간 역할을 하는 인터페이스 ADO 객체를 통해 데이터처리 요구 => OLE DB 가 실제데이터 처리하여 요구사항을 넘겨줌. 데이터 제공자. ADO 객체. ODBC 드라이버. OLE DB. DB.
E N D
11장 . ASP 와 데이터 베이스 1. ADO 객체 모델 2. DSN 과 데이터 베이스 연결 3. 레코드셋
2. OLE DB와 ADO • ADO 객체 • OLE DB 제공자를 통해서 데이터를 다룸 • OLE DB • 프로그램에서 여러 형태의데이터를 다룰 수 있도록 제공된 컴포넌트 • 중간 역할을 하는 인터페이스 • ADO 객체를 통해 데이터처리 요구 => OLE DB가 실제데이터 처리하여 요구사항을 넘겨줌 • 데이터 • 제공자 • ADO • 객체 • ODBC • 드라이버 • OLE DB DB
. 데이터 제공자 • 실제로 데이터를 처리해주는 드라이버와 엔진을 말함 • ODBC 가 가장 대표적인 예 • ADO 객체는 데이터 제공자가 지원하는 기능을 이용 . ADO 와 데이터 베이스 • 데이터 베이스를 다루는 객체
3. ADO 객체 모델 • 데이터 베이스를 다루는 기본 과정 • 데이터 베이스 연결 (어느 데이터 베이스에 연결할지를 지정) => DSN 을 통해서 지정하고 연결 2. 명령 실행 : SQL 문을 실행하고나 명령실행 => 레코드 검색, 추가, 삭제, 수정등 3. 실행 결과 : 조건에 맞는 레코드 검색시 레코드 셋으로 가져옴 (실제로 이용하는 값은 각 레코드가 가진 필드값)
. ADO 객체 구성 • ADO 객체 모델 : 데이터 베이스를 사용하는 데 필요한 객체 • Connection 객체 : 데이터 베이스 연결 • Command 객체 : SQL 쿼리 실행 • Recordset 객체 : 검색해서 얻어진 레코드 집합 • Record 객체 • Stream 객체 • Parameter 객체 • Field 객체 • Error 객체 • Page 291 ADO 객체 모델 그림 참조
4. ADO 객체 • Connection 객체 • Comand 객체 • Recordset 객체 • 각 객체마다 명령을 실행하고 결과를 받아옴
. Connection 객체 • 데이터 소스와 연결 • Connection 객체도 데이터 베이스에 연결만 하는 기능만 있는 것이 아니라 데이터베이스에 연결하여 명령을 실행하고 그 결과를 보여줄 수 있는 메서드도 지원함
. Command 객체 • 데이터 소스에 데이터를 다루는 명령을 보낼때 사용 • Connection 객에서도 SQL 명령을 보내서 실행 가능(명령 처리 단순) • 보통 SQL 실행결과로 레코드를 리턴하지 않는 경우에 많이 사용 (데이터 추가/수정/삭제 )
. Recordset 객체 • Connection 객체와 Command 객체를 이용해서 명령을 실행 한 다음 받아오는 결과는 레코드 셋 형태이고, Recordset 객체를 통해 데이터 다룸 • 레코드 셋이란 여러 레코드를 담고 있는 객체 • 선택된 레코드는 하나이며 레코드 선택을 바꾸어가면서 데이터 값을 가져오거나 변경 가능 • 레코드 검색뿐만아니라 추가/삭제/수정도 가능
5. ADO 상수 • ADO 객체에서 사용하는 상수 값들은 파일 하나로 정의 되어 있음 • 파일 이름은 adovbs.inc => VBScript 를 이용해서 필요한 상수 정의 • 파일 포함 방법 • <!- - include file=“adovbs.inc”- -> • C:/Program Files / Common Files/System/ado 폴더에 존재 • 자바스크립트를 사용하는 파일이라면 adojavas.inc 파일을 포함 • 상수 파일을 포함하지 않고 타입 라이브러리를 선언해 주면 상수를 별도로 파일로 포함하지 않고서도 바로 사용가능 • <! - - MetaData Type=“typelib” file=“c:/program files/Common Files/System/ado/msado15.dll - -> • 데이터베이스를 사용하는 웹애플리케이션인 경우 DB 사용이 여러 페이지에 걸쳐 일어나므로 모든 페이지에서 사용할 수 있도록 Global.asa 파일에 한번만 선언하여 사용
6. 데이터 소스 연결 • 어디에 있는 데이터베이스를 사용할 것인가 선택하는 과정 (어떤 종류의 데이터베이스 이며, 어디에 위치하는 지 등등의 정보필요)
. 연결 문자열 • DSN 없이 연결 문자열을 구성해서 DB에 연결 • 1. ODBC 로 연결(ODBC드라이버선택(“SQL Server”),서버이름,데이터베이스 이름, 사용자 ID,암호지정) => Driver={SQL Server};Server=(local);Database=Pubs;UID=sa;PWD=; • 2. OLE DB 제공자 이용(OLE DB제공자 지정(“SQLOLEDB”), 데이터 소스에 서버이름, 데이터베이스이름,사용자 ID, 암호 지정) • Provider=SQLOLEDB;Data Source=(local);Initial Catalog=WebDBs; UserId=sa;Password=; => Provider=SQLOLEDB;Data Source =(local); Database=Pubs;UID=sa;PWD=;
7. 데이터 베이스 연결– Connection 객체 • Connection객체의 ProgID => ADODB.Connection • Connection객체를 생성한 다음, 사용하고자 하는 데이터 소스를 열어 연결(Connection 객체의 open 메서드 이용 => 연결 문자열은 데이터 소스 이름이나 드라이버 이름으로 구성한 연결 문자열을 주어도 됨) • Set DBConn = Server.CreateObject(“ADODB. Connection”) • DBConn.Open “WebDBs” • DB 처리 • Connection 객체 사용이 끝났으면 연결을 닫고 변수에 Nothing을 할당함으로 사용하고 있던 리소스를 해제 • DBConn .Close • DBConn = Nothing
. Connection 객체 이용 • 데이터 베이스를 이용할때 마다 필요한 객체므로 데이터베이스를 사용하는 빈도수가 높은 경우 처음에 미리 한번 생성해 두었다가 반복해서 사용하는 것이 효율 • => Connection 객체를 생성한 다음 이것을 Session 변수 또는 Application 변수로 보관해 놓고 이용 • Global.asa 파일에서 지정
. Global.asa – Session 변수 사용예 <script language="vbscript" runat="server"> Sub Session_OnStart() ' Connection 객체 생성 및 열기 Set Session( "WebDB" ) = Server.CreateObject("ADODB.Connetion") Session( "WebDB" ).open "WebDBs" End Sub Sub Session_OnEnd() ' Connection 객체 닫기 및 소멸 Set Session( "WebDB" ).Close Set Session( "WebDB" ) = Nothing End Sub </script>
8. 데이터베이스 다루기-Recordset • ADO 객체 모델에서 가장 많이 사용하는 객체 • 이용방법 • Recordset 객체 생성 • Open 메서드로 레코드셋 가져옴 (인자 : 테이블이름,DSN 지정) Set rs = Server.CreateObject(“ADODB.Recordset”) rs.Open “Member”,”WebDBs” ‘레코드셋 다루기 rs.Close rs = Nothing
. 레코드셋 얻어내는 방법 • Recordset 객체를 생성하여 Open 메서드를 이용해서 가져오는 방법 • Connection 객체를 생성한 다음 SQL 문을 실행하여 그 결과로 레코드셋을 가져오는 방법 set DBConn = Server.CreateObject("ADODB.Connetion") DBConn.Open"DSN=WebDBs;UID=sa;PWD=;" sql = “select * from titles” set rs = DBConn.Execute(sql) DBConn.Close DBConn = Nothing
.커서(Cursor)와 커서타입 • 커서 : 레코드 셋에서 현재 레코드를 가르키는 포인터 • 커서 타입 : 커서를 옮기는 방식(레코드를 이동 => 디폴트값:adOpenForwardOnly) • adOpenStatic – 정적 커서(레코드셋의 복사본 제공, 모든 이동형태가능) • adOpenForwardOnly – 전진전용커서 (정적커서와 비슷, 이동은 앞으로만) • adOpenDynamic – 다이나믹커서(레코드셋 갱신 , 모든 이동형태 가능) • adOpenKeyset – 키셋 커서 (레코드셋 갱신(다른 사용자가 추가한 레코드만 볼수 없음), 모든 이동형태 가능) • 다이나믹하게 변하는 레코드 셋을 다루는 것이 관리하는 데 많은 작업을 요구 • ADO 상수 포함후 사용
. 락(lock)과 락 타입 • 락(lock) : 한 사람이 사용하는 동안 다른 사람이 접근 불가능 (한 사용자가 레코드를 바꾸기 전에 다른 사용자가 바꿀 수 없음) • 사용이 다 끝난다음 락(Lock)을 풀어줌 • 락타입 • adLockReadOnly: 데이터를 바꿀 수 없으며 읽을 수만 있음 • adLockPessimistic: 레코드 단위로 락을 걸며, 레코드 편집을 하는 순간부터 레코드에 락을 건다. • adLockOptimistic : 레코드 단위로 락을 걸며, Update 메서드를 부르는 순간에만 락을 건다. • adLockBatchOptimistic : 배치 갱신 모드 요구
. 레코드 셋 이동 • 레코드 셋을 열고 난 후 레코드 포인터를 바꾸면서 데이터를 다룸 • 레코드 이동 관련 Recordset 객체의 메서드/프로퍼티 • EOF : 레코드셋 마지막을 읽었을 때 true 값을 가짐 • MoveNext : 그 다음 레코드로 이동 • MovePrevious : 이전 레코드로 이동
. 레코드 필드 값 • Recordset 객체의 Filed 콜렉션으로 접근 • Filed 콜렉션은 디폴트 콜렉션으로 Filed콜렉션 이름 생략가능 • rs.Fileds(“UserID”) • rs.(“UserID”) • 필드의 이름을 모르는 경우 인덱스로 접근 가능 • rs.Fileds( 0 ) • rs.( 0 )
. 필드 이름과 값 보이기 • 필드의 값 구하기 (.value 사용) • rs.Filed( 0 ).value • 필드의 이름 구하기 (.name 사용) • rs.Filed( 0 ).name • 레코드셋에 필드 개수 (count 사용) 구하여 레코드의 전체 필드 이름/값 구하기 <% for i=0 to rs.fileds.count-1 Response.Write rs.fields(i).name Response.Write rs.fields(i).value next %>
. 레코드 셋 가져오기 • Recordset 객체의 Open 메서드를 이용하는 방법 • Connection 객체의 Execute 메서드를 실행하고 결과를 리턴받는 방법
. 레코드셋 관련 예제– Recordset.asp <% set DBConn = Server.CreateObject("ADODB.Connection") DBConn.Open"DSN=WebDBs;UID=sa;PWD=;" ' SQL 문을 실행, 레코드셋 객체를 얻는다. set rs = DBConn.Execute( "select * from titles" ) while not rs.EOF Response.Write rs("title_id") & "," & rs("title") & "<br>" ' 다음 레코드로 이동 rs.MoveNext wend ' 데이터베이스 닫기 DBConn.Close set DBConn = Nothing %>
. 레코드셋 관련 예제– Recordset2.asp <% set DBConn = Server.CreateObject("ADODB.Connection") DBConn.Open"Driver={SQL Server};Server=(local);Database=Pubs;UID=sa;PWD=;" ' SQL 문을 실행, 레코드셋 객체를 얻는다. set rs = DBConn.Execute( "select * from titles" ) while not rs.EOF Response.Write rs("title_id") & "," & rs("title") & "<br>" ' 다음 레코드로 이동 rs.MoveNext wend ' 데이터베이스 닫기 DBConn.Close set DBConn = Nothing %>
. 레코드셋 관련 예제– Recordset3.asp <% set DBConn = Server.CreateObject("ADODB.Connection") DBConn.Open"Provider=SQLOLEDB;Data Source =(local); Database=Pubs;UID=sa;PWD=;" ' SQL 문을 실행, 레코드셋 객체를 얻는다. set rs = DBConn.Execute( "select * from titles" ) while not rs.EOF Response.Write rs("title_id") & "," & rs("title") & "<br>" ' 다음 레코드로 이동 rs.MoveNext wend ' 데이터베이스 닫기 DBConn.Close set DBConn = Nothing %>
. 레코드셋 활용예 – ShowAll.asp <html> <link href="../common/basic.css" rel=stylesheet type=text/css> <body> <h3> 테이블 보기 </h3> <hr> <% ' Connection 객체를 DB와 연결 Set DBConn = Server.CreateObject("ADODB.Connection") DBConn.Open"DSN=WebDBs;UID=sa;PWD=;" ' SQL 질의 실행 및 Recordset 저장 Set rs = DBConn.Execute( "select title_id,title,type from titles" ) %>
. 레코드셋 활용예 – ..이어서 <table border> <% ' 필드 이름 보여주기 Response.Write "<tr bgColor=#f3f3f3>" For index =0 to ( rs.fields.count-1 ) Response.Write "<td><b>" & rs.fields(index).name & "</b></td>" Next Response.Write "</tr>"
. 레코드셋 활용예 – ..이어서 ' 필드 값 보여주기 레코드셋 끝을 읽을 때까지 반복 실행 while Not rs.eof Response.Write "<tr bgColor=#f3f3f3>" for i=0 to (rs.fields.count-1) Response.Write "<td>" & rs( i ) & "</td>" next Response.Write "</tr>" ' 다음 레코드로 이동합니다. rs.MoveNext wend ' 레코드셋과 연결을 닫는다. rs.close DBConn.close %> </table> </body> </html>
9. 레코드셋 활용예 -결과 9. 레코드셋 활용예