FLE2012121311490.

Download Report

Transcript FLE2012121311490.

2008 인터넷 실험
3. ASP 고급 실험
3. ASP 고급 실험
Autumn, 2008
Keun Ho Ryu
Chungbuk National University
Page 1
2008 인터넷 실험
3. ASP 고급 실험
내용


학습목표
ADO 객체를 이용하여 데이터베이스를 사용
하고 이를 활용할 수 있다.
학습내용
데이터베이스
SQL
데이터베이스와의 연결
ADODB 관련 객체
 Connection객체, Command객체, RecordSet객체
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
객체의 종류
스크립팅 객체
 FileSystemObject, Dictionary
브라우저 객체
window
textarea
frame
document
ASP 객체




Request, Response
Server
Application, Session
ContextObject
ADO 객체
Chungbuk National University
location
history
navigator
plugins
mimeType
form
text
link
fileUpload
image
password
area
hidden
anchor
submit
applet
reset
plugins
radio
layer
checkbox
button
select
option
2008 인터넷 실험
3. ASP 고급 실험
데이터베이스

데이터베이스의 기본 개념
데이터베이스(이름:Pubs)
데이터베이스(이름:Test)
테이블명
데이터베이스(이름:ADO)
Members
데이터베이스명
Board
이름
아이디
번호
비밀번호
글쓴이
…
글내용
…
…
필드명
Products
품명
일련번호
…
단가
재고수량
메뚜기
111111
…
5
1000
레코드
꼴뚜기
222222
…
5
2000
레코드 셋
망둥어
333333
…
5
3000
필드
필드
…
필드
필드
Chungbuk National University
2008 인터넷 실험
MS-SQL Server


데이터베이스 : Access, Oracle, MS-SQL 등
MS-SQL
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL erver

SystemTypes
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
MS-SQL Server

SystemTypes- 문자열 관련
분류
문자열
유니코드
문자열
이진
문자열
데이터
형식
설
명
char
유니코드가 아닌 고정 길이 문자 데이터(최대 8,000자)
varchar
유니코드가 아닌 가변 길이 문자 데이터(최대 8,000자)
text
유니코드가 아닌 가변 길이 데이터(최대 231-1 자)
nchar
고정 길이 유니코드 데이터(최대 4,000자)
nvarchar
가변 길이 유니코드 데이터(최대 4,000자)
ntext
가변 길이 유니코드 데이터(최대 230-1 자)
binary
고정 길이 이진 데이터(최대 8,000바이트)
varbinary
가변 길이 이진 데이터(최대 8,000바이트)
image
가변 길이 이진 데이터(최대 231-1 바이트)
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
MS-SQL Server

SystemTypes- 숫자 관련
분류
숫자
(정수)
숫자
(실수)
설
데이터 형식
명
bigint
정수 데이터(범위 : -263 ~ 263-1)
int
정수 데이터(범위 : -231 ~ 231-1)
smallint
정수 데이터(범위 : -215 ~ 215-1)
tinyint
정수 데이터(0 ~255)
bit
정수 데이터(1 또는 0 값)
decimal
고정 정밀도 및 배율 숫자 데이터(-1038+1 ~ 1038–1)
numeric
decimal과 기능이 같음
float
부동 정밀도 숫자 데이터
(범위 : -1.79E + 308 ~ 1.79E + 308)
real
부동 정밀도 숫자 데이터
(-3.40E + 38에서 3.40E + 38)
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
MS-SQL Server

SystemTypes- 날짜 관련
분류
데이터 형식
설
명
datetime
날짜 및 시간 데이터(1753년 1월 1일에서 9999년 12월 31일까지
1/300초의 정확성을 가짐)
smalldatetime
날짜 및 시간 데이터(1900년 1월 1일에서 2079년 6월 6일까지 1
분의 정확성을 가짐)
날짜
Chungbuk National University
2008 인터넷 실험
MS-SQL Server
CREATE TABLE 테이블명(
 SQL-테이블
생성
필드명
데이터형 [IDENTITY][널값
허용 여부][Primary Key],
필드명 데이터형 [IDENTITY][널값 허용 여부][Primary Key],
...
)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL Server

SQL-데이터 입력(삽입)
INSERT [INTO]
테이블명 (필드리스트)
VALUES (필드값리스트)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL Server

SQL-데이터 질의(검색)
SELECT 필드리스트
FROM 테이블명
[WHERE 검색조건]
[ORDER BY 필드 [ASC | DESC]
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
MS-SQL Server

SQL-데이터 질의의 조건(Where)에 사용되는 연산자
연산자의 종류 및 설명
분류
연산자
설
명
산술 연산자
+(더하기), -(빼기), *(곱하기), /(나누기), %(나머지반환)
비트 연산자
&(비트 단위 AND), |(비트 단위 OR), ^(비트 단위 XOR)
비교 연산자
=(같음), >(보다 큼), <(보다 작음), >=(크거나 같음), <=(작거나 같음)
<>(같지 않음), !>(보다 크지 않음), !<(보다 작지 않음), !=(같지 않음)
논리 연산자
ALL
모든 비교 집합이 TRUE인 경우 TRUE
AND
두 개의 부울 식이 모드 TRUE인 경우 TRUE
ANY
비교 집합 중 어느 하나가 TRUE인 경우 TRUE
BETWEEN
피연산자가 범위 안에 있는 경우 TRUE
EXISTS
하위 쿼리에 행이 포함된 경우 TRUE
IN
피연산자가 식 목록 중 하나와 동일한 경우 TRUE
LIKE
피연산자가 패턴과 일치하는 경우 TRUE
NOT
다른 모든 부울 연산자의 값을 반대로 변경
OR
한 개의 부울 식이 TRUE인 경우 TRUE
SOME
비교 집합 중 일부가 TRUE인 경우 TRUE
Chungbuk National University
2008 인터넷 실험
MS-SQL Server

SQL-데이터 수정(Update)
UPDATE 테이블명
SET 필드명=표현식
[WHERE 수정조건]
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL Server

SQL-데이터 삭제
DELETE [FROM] 테이블명
[WHERE 삭제조건]
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
MS-SQL Server

SQL-저장 프로시저 만들기
CREATE PROC[EDUER] 프로스저명 [;번호][{@입력인자 데이터형식}]
AS
SQL문장들......
Chungbuk National University
2008 인터넷 실험
MS-SQL Server

SQL-저장 프로시저 실행
EXEC[UTE]] 프로시저명 [;번호] | {@입력인자의 값}
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL Server

SQL-저장프로시저 삭제
DROP PROC[EDURE] 프로스저명
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
MS-SQL Server

SQL-테이블 삭제
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
데이터베이스 연결 제공

데이터베이스 연결의 대표적인 방법
ODBC(Open DataBase Connectivity)
 관계형 데이터베이스
OLEDB
 관계형 데이터베이스, 비관계형 데이터베이스
기타
 DAO, RDO  웹 환경에 적합하지 않음
Chungbuk National University
2008 인터넷 실험
데이터베이스 연결-ODBC

ODBC 설정 단계(1)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
데이터베이스 연결-ODBC

ODBC 설정 단계(2)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
데이터베이스 연결-ODBC

ODBC 설정 단계(3)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
데이터베이스 연결-ODBC

ODBC 설정 단계(4)
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
데이터베이스 연결-OLEDB

OLEDB 설정 단계
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
데이터베이스 연결-OLEDB

OLEDB 설정 단계
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

ADO 객체 모델
데이터베이스의 사용에 필요한 객체의 모음
ADO 객체의 종류
설
객체의 종류
명
Connection
데이터베이스와의 연결하고 SQL문을 실행.
Command
데이터베이스와의 연결하고 SQL문을 실행.
여러 가지 명령 처리 방법 존재.
Recordset
데이터베이스 질의를 통해 얻은 레코드 셋을 저장.
Record
레코드 셋, 디렉터리, 모든 파일 시스템 파일에서 한 행(Row)을 유지
Stream
Binary 데이터 또는 텍스트를 읽고, 쓰고, 조작.
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Connection 객체의 기능
데이터베이스와의 연결 설정
 Open, Close
데이터 소스에 SQL명령을 실행
 Execute
트랜잭션 처리
 BeginTrams, CommitTrans, RollbackTrans
에러 처리
 Error
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Connection 객체의 메소드
설 명
메소드
BeginTrans
새로운 트랜잭션을 시작
Cancel
비동기적인 작업들을 취소
Close
기존 열린 연결 종료
CommitTrans
수정 내용을 저장하고 트랙잭션을 종료
Execute
SQL 문장, 저장 프로시저 실행
Open
데이터 소스에 연결
OpenSchema
제공자(Provider)로부터 데이터베이스 스키마 획득
RollbackTrans
수정 내용을 취소하고 트랜잭션을 종료
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Connection 객체의 속성
설 명
속성
Attributes
기존 트랜잭션이 끝난 뒤 새로운 트랜잭션의 시작 여부를 제어
ConnectionString
데이터 소스 연결을 생성하는 데 필요한 정보
CommandTimeout
명령을 시도한 다음 기다리는 시간(초)
ConnectionTimeout
연결을 시도한 다음 연결될 때까지 기다리는 시간(초)
DefaultDatabase
Connection 개체에 대해 기본적인 데이터베이스를 선언
Provider
연결 제공자 정보 표시
State
개체의 상태 표시
Version
ADO 버전 표시
IsolationLevel
트랜잭션이 시작되었을 때 트랜잭션의 Isolation 수준을 결정
Mode
연결된 데이터에 대한 수정 권한을 설정
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Connection 객체의 메소드
Open
Connection객체.Open [ConnectionString], [UserID], [Password], [Option]
Connection객체.Provider = 공급자
Connection객체.ConnectString="UserID=사용자계정;password=암호"
Connection객체.Open
Connection객체.DefaultDatabase = 데이터베이스명
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Connection 객체의 메소드
 Execute
 반환값이 존재하지 않는 경우(Insert, Update, Delete)
Connection객체.Execute CommandText, [RecordsAffected], [Options]
 반환값이 존재하는 경우
Set RecordSet객체=Conncetion객체.Execute(CommandText,
[RecordsAffected], [Options])
또는
Set RS=Server.CreateObject("ADODB.RecordSet")
......
RS=Conncetion객체.Execute(CommandText, [RecordsAffected], [Options])
반환값이 없는 SQL문,
반환값 있는 SQL문,
테이블이름,
저장프로시저
Chungbuk National University
CommandText에 의
해 영향을 받은 레
코드의 개수
상 수
값
설
명
adCmdUnknown
8
CommandText가 알 수 없는 명령 형식
adCmdText
1
CommandText가 SQL 문장과 같은 명령의 텍스트
adCmdTable
2
CommandText가 레코드셋의 근거가 되는 테이블
adCmdStoreProc
4
CommandText가 저장 프로시저
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

ADO관련 상수 정의
상 수
값
설
명
adCmdUnknown
8
CommandText가 알 수 없는 명령 형식
adCmdText
1
CommandText가 SQL 문장과 같은 명령의 텍스트
adCmdTable
2
CommandText가 레코드셋의 근거가 되는 테이블
adCmdStoreProc
4
CommandText가 저장 프로시저
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

ADO관련 상수의 사용
Adovbs.inc의 상수 사용
<!--#include virtual="adovbs.inc" -->
타입 라이브러리의 사용(Adovbs.inc의 사용보다 처리
속도가 빠름)  권장
<!--METADATA TYPE="typelib" NAME="ADODB Type Library"
FILE = "C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"
-->
Chungbuk National University
2008 인터넷 실험
ADO 객체 모델

Connection 객체의 메소드
Close
Connection객체.Close
‘ 연결만 닫음
Connection객체 = Nothing ‘객체를 소멸시킴
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
ADO 객체 모델

Connection 객체의 메소드
트랜잭션 관련 처리
Connection객체.[BeginTrans | CommitTrans | RollbackTrans]
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
ADO 객체 모델

예제
Chungbuk National University
3. ASP 고급 실험
BoardWrite.asp
2008 인터넷
실험
1
<HTML>
2
<Script Language="VBScript">
3
Sub btnSend_OnClick
If(WriteForm.Writer.value = "") Then
4
alert "이름을 입력해 주세요..."
5
Exit Sub
6
End If
7
If(WriteForm.Title.value = "") Then
8
alert "제목을 입력해 주세요..."
9
Exit Sub
10
End If
11
If(WriteForm.Contents.value = "") Then
12
alert "글을 작성해 주세요..."
13
Exit Sub
14
End If
15
16
If(WriteForm.pwd.value = "") Then
17
alert "비번은 수정/삭제시 필요합니다."
18
Exit Sub
19
End If
20
WriteForm.submit
21
22
End Sub
23
</Script>
24
<Body>
25
<Form Name="WriteForm" Method="Post" action="BoardDB.asp">
26
<Table><Caption>새글쓰기</Caption>
27
<Tr><Td>글쓴이</Td>
<Td><input type="text" name="Writer" size="20"></Td></Tr>
28
29
<Tr><Td>e-mail</Td>
<Td><input type="text" name="Email" size="30"></Td></Tr>
30
<Tr><Td>homepage</Td>
31
<Td><input type="text" name="Homepage" size="30"></Td></Tr>
32
<Tr><Td>글제목</Td>
33
<Td><input type="text" name="Title" size="30"></Td></Tr>
34
<Tr><Td>글내용</Td>
35
<Td>
36
<textarea wrap="hard" name="Contents" rows="10" cols="50">
37
</textarea></Td></Tr>
38
<Tr><Td>비밀번호</Td>
39
<Td><input type="password" name="pwd" size="8"><br></pre></Td></Tr>
40
41
<Tr><Td Colspan="2">
<Center><input type="button" value="글올리기" name="btnSend">
42
<input type="reset" value="다시쓰기" name="reset"><br></Center></Td></Tr>
43
44
</Table>
45
</Form>
46
</BODY>
Chungbuk
47
</HTML> National University
3. ASP 고급 실험
2008 인터넷 실험
BoardDB.asp
1
2
3
4
5
6
7
8
9
10
<%
Option Explicit
Dim Writer, Email, Homepage, Title, Pwd, Contents, strConnect, SQL
Dim objCon, RS, intNumber
Writer=request("Writer")
Email=request("Email")
Homepage=request("Homepage")
Title=request("Title")
Pwd=request("pwd")
Contents=request("Contents")
Chungbuk National University
3. ASP 고급 실험
2008 인터넷BoardDB.asp
실험
12
Set objCon=Server.CreateObject("ADODB.Connection")
13
objCon.Provider="SQLOLEDB.1"
14
strConnect="Password=sa;User ID=sa;Data Source=(local);Initial Catalog=ADO;"
15
objCon.ConnectionString=strConnect
16
objCon.Open
17
질의 수행
18
Set RS=objCon.Execute("Select Max(num) from Board")
19
20
If IsNull(RS(0)) Then
intNumber=1
반환된 레코드셋의 처리
21
22
Else
intNumber=rs(0)+1
23
24
End If
25
26
SQL="Insert Into Board(Writer, Email, Homepage, Title, Pwd, num, "
27
SQL=SQL & "Writeday, ReadNum, Contents) Values"
28
SQL=SQL & "('" & Writer & "' ,'"
29
SQL=SQL & Email & "','"
30
SQL=SQL & Homepage & "','"
31
SQL=SQL & Title & "','"
SQL문 문자열 만들기
32
SQL=SQL & pwd & "',"
33
SQL=SQL & intNumber & ",'"
34
SQL=SQL & now() & "', 0 , '"
35
SQL=SQL & Contents & "')"
SQL문 실행
36
(트랜잭션처리)
37
objCon.BeginTrans
objCon.Execute SQL
38
objCon.CommitTrans 'objCon.RollbackTrans
39
RS.close
40
연결 끊기 및 객체
objCon.Close
41
소멸
set Rs=Nothing
42
set objCon=Nothing
43
44
Response.Write "성공" 'Server.Transfer("BoardList.asp")
45
Chungbuk
46
%> National University
3. ASP 고급 실험
DB 연결
2008 인터넷 실험
ADO 객체 모델

Command 객체의 기능
SQL문과 저장 프로시저를 실행
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Command 객체의 메소드
설
메소드
명
CreateParameter
Parameters 컬렉션에 새로운 Parameter 객체 생성
Execute
명령어 실행
Cancel
비동기적인 명령 작업을 취소
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Command 객체의 속성
설
속성
명
ActiveConnection
Command 객체에서 사용하는 Connection 객체
CommandTimeout
명령을 시도한 다음 기다리는 시간(초)
CommandText
실행할 SQL문
CommandType
실행할 명령어의 타입
Prepared
명령문을 실행하기 전에 컴파일 된 버전의 저장 여부를 결정
Properties
Command 객체의 모든 속성 등을 저장하는 컬렉션
State
Command 객체의 상태
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Command 객체의 메소드
DB 연결(ActiveConnection 속성)
 Connection 객체가 있는 경우
Set objCon=Server.Create("ADO.Connection")
Set objCom=Server.Create("ADO.Command")
objCon.Open = "연결 문자열"
objCom.ActiveConnection = objCon
 Connection 객체가 없는 경우
Set objCom=Server.Create("ADO.Command")
objCom.ActiveConnection = "연결문자열"
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Command 객체의 메소드
Execute
 반환값이 없는 경우
Command객체.Execute([RecoedAffected], [Parameters], [Options])
 반환값이 있는 경우(RS는 레코드 셋)
Set RS=Command객체.Execute([RecoedAffected], [Parameters], [Options])
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

Command 객체의 메소드
CreateParameter 메소드
Set parameter
= Command객체.CreateParameter([Name], [Type], [Direction], [Size], [Value])
객체의 이름
객체의 최대 크기
객체에 지정된 값
객체의 데이터 형식(SQL:DataTypeEnum상수)
char:adchar, varchar:adVarChar, int:adInteger, text:adVarChar
등
Chungbuk National University
0: adParamUnknown, 속성을 알 수 없음을 표시
1: adParamInput, 입력 변수임을 표시(기본값)
2: adParamOutput, 출력 변수임을 표시
3: adParamInputOutput, 입력, 출력 동시 지원
4: adParamReturnValue, 반환 값임을 표시
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델
 Command 객체의 메소드
Parameters 컬렉션의 메소드
설
메소드
명
Append
컬렉션에 Parameter 객체를 추가
Delete
컬렉션에 Parameter 객체를 제거
Refresh
컬렉션의 Parameter 정보 얻어옴
사용 형식의 예
• @AA 매개변수에 대한 정의(저장 프로스저에서 정의)
Command객체.Parameters.Append Command객체.CreateParemeter("@AA",
adVarChar, adParamInput, 50, "안녕하쇼")
• @BB 매개변수에 대한 정의(저장 프로스저에서 정의)
Command객체.Parameters.Append Command객체.CreateParemeter("@BB",
adInteger, adParamInput, , 5)
Chungbuk National University
2008 인터넷 실험
ADO 객체 모델

예제
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
저장 프로시저
생성
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
요청 자료 넘겨 받기
Writer=request("Writer") / Email=request("Email") / Homepage=request("Homepage")
Title=request("Title") / Pwd=request("pwd") / Contents=request("Contents")
Set objCon=Server.CreateObject("ADODB.Connection")
objCon.Provider="SQLOLEDB.1"
strConnect="Password=sa;User ID=sa;Data Source=(local);Initial Catalog=ADO;"
objCon.ConnectionString=strConnect
objCon.Open
Set objCom=Server.CreateObject("ADODB.Command")
objCom.ActiveConnection=objCon
objCom.CommandText = "MaxQuery"
objCom.CommandType = adCmdStoredProc
Set RS=objCom.Execute
If IsNull(RS(0)) Then
intNumber=1
Else
intNumber=RS(0) + 1
End If
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
objCom.Parameters.refresh
objCom.CommandText = "WriteInsert"
objCom.CommandType = adCmdStoredProc
objCom.Parameters.Append objCom.CreateParameter("@Writer", adVarChar, adParamInput, 12, Writer)
objCom.Parameters.Append objCom.CreateParameter("@Email", adVarChar, adParamInput, 50, Email)
objCom.Parameters.Append objCom.CreateParameter("@Homepage",adVarChar,adParamInput,50,Homepage)
objCom.Parameters.Append objCom.CreateParameter("@Title", adVarChar, adParamInput, 20, Title)
objCom.Parameters.Append objCom.CreateParameter("@Pwd", adVarChar, adParamInput, 8, Pwd)
objCom.Parameters.Append objCom.CreateParameter("@Num", adInteger, adParamInput, ,intNumber)
objCom.Parameters.Append objCom.CreateParameter("@WriteDay", adVarChar, adParamInput, 30, now())
objCom.Parameters.Append objCom.CreateParameter("@ReadNum", adInteger, adParamInput,,0)
objCom.Parameters.Append
objCom.CreateParameter("@Contents", adVarchar, adParamInput, 50, Contents)
objCon.BeginTrans
objCom.Execute cntRecordsAffected, , adExecuteNoRecords
objCon.CommitTrans 'objCon.RollbackTrans
objCon.Close
set Rs=Nothing
set objCon=Nothing
set objCom=Nothing
Response.Write "성공" 'Server.Transfer("BoardList.asp")
%>
Chungbuk National University
2008 인터넷 실험
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

RecordSet 객체의 기능
SQL문의 실행으로 반환되는 결과를 저장하는
역할
 저장된 RecordSet은 레코드가 하나 또는 그 이상의 레
코드들의 집합
 RecordSet을 이용하여 추가(AddNew), 수정(UpDate)등
을 작업을 수행
 레코드 사이를 이동하면서 필요한 데이터를 읽어 들
임
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

RecordSet 객체의 기능
SQL문의 실행으로 반환되는 결과를 저장하는
역할
 저장된 RecordSet은 레코드가 하나 또는 그 이상의 레
코드들의 집합
 RecordSet을 이용하여 추가(AddNew), 수정(UpDate)등
을 작업을 수행
 레코드 사이를 이동하면서 필요한 데이터를 읽어 들
임
Chungbuk National University
2008 인터넷 실험
RecordSet(RS)
3. ASP 고급 실험
Absolutepage=1
5
RS.BOF
Absolutepage=2
MoveFirst
5
PageSize=5
Absolutepage=3
MoveLast
RS.EOF
5
Absolutepage=4
1
페이지 나누기 전
Chungbuk National University
PageCount=4
페이지 나눈 후
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

RecordSet 객체의 메소드
설
메소드
명
Open
커서 열기
Close
열린 개체 닫기
AddNew
새로운 레코드 생성
Delete
현재 레코드 삭제
Update
기존 레코드 변경 사항 저장
Move
현재 레코드 포인터를 이동
MoveFirst
처음 레코드로 이동
MoveLast
마지막 레코드로 이동
MoveNext
다음 레코드로 이동
MovePrevious
이전 레코드로 이동
RS.BOF
MoveFirst
MoveLast
RS.EOF
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

RecordSet 객체의 속성
설
속성
명
AbsolutePage
현재 레코드가 위치한 절대 페이지
AbsolutePosition
현재 레코드가 순서 위치
ActiveConnection
레코드셋에 있는 Connection 개체
BOF
현재 레코드 위치가 첫 번째 레코드에 있으면 TRUE
EOF
마지막 레코드 다음에 레코드 위치가 있으면 TRUE
CursorType
커서 타입
LockType
락 타입
PageSize
하나의 페이지를 구성하는 레코드 수 지정
PageCount
레코드셋이 가지고 있는 데이터 페이지 수
RecordCount
현재 레코드셋에 있는 레코드 수
Filter
레코드셋에 대한 데이터 필터를 설정하거나 반환
RecordCount
현재 레코드셋 내에 있는 레코드의 개수
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
ADO 객체 모델

RecordSet 객체의 메소드
Open
RecordSet.Open Source ActiveConnection, [Cursor타입], [Lock타입], [옵션]
Command 객체,
SQL문장,
테이블 이름,
저장 프로시저
Chungbuk National University
기존의 Connection 객체,
연결 문자열
adOpenStatic : 3
adOpenForwardOnly : 0
adOpenDynamic : 2
adOpenKeyset : 1 (페이징)
adLockReadOnly
adLockPessimistic
adLockOptimistic
adLockBatchOptimistic
2008 인터넷 실험
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
<%
Option Explicit
Dim page, strConnect, objCon, RS, SQL, TotalPage, i
'페이징의 적용
page=request("page")
if page="" then
page=1
end if
Set objCon=Server.CreateObject("ADODB.Connection")
objCon.Provider="SQLOLEDB.1"
strConnect="Password=sa;User ID=sa;Data Source=(local);Initial Catalog=ADO;"
objCon.ConnectionString=strConnect
objCon.Open
Set RS=Server.Createobject("ADODB.RecordSet")
'RecordSet을 열기 전에 PageSize 지정
Rs.Pagesize=5
'커서 타입 반드시 지정해야 페이징 됨
SQL="Select * From Board Order By num Desc"
RS.Open SQL, objCon, 1
%>
Chungbuk National University
<HTML><BODY>
2008
인터넷 실험
<Table border="1">
<Caption><center>
<%If RS.BOF or RS.EOF Then %>
등록된 글이 없습니다.
<%Else
Totalpage=RS.Pagecount '전체 페이지수 대입((레코드 수/PageSize) 올림)
Rs.Absolutepage=page '지정된 페이지의 첫 레코드로 위치 이동
%>
단순게시판<a href="BoardWrite.asp">(새글)</a>
</Center></Caption>
<Th>번호</Th><Th>글쓴이</Th><Th>제목</Th><Th>조회수</Th><Th>날짜</Th>
<%
i=1
Do until RS.EOF or i>RS.Pagesize
%>
<Tr><Td><%=RS("num")%></Td>
<Td><A href="mailto:<%=RS("Email")%>"><%=RS("Writer")%></A></Td>
<Td>
<A href="Contents.asp?idx=<%=RS("idx")%>"><%=RS("Title")%></A></Td>
<Td><%=RS("Readnum")%></Td>
<Td><%=Year(RS("Writeday")) & "/" %>
<%=Month(RS("Writeday")) & "/" %>
<%=Day(RS("Writeday"))%></Td>
RS.Close
</Tr>
objCon.Close
<%
Set RS=Nothing
RS.Movenext
Set objCon=Nothing
i=i+1
%>
Loop
</Table>
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
<%If Cint(page) > 1 Then%>
<A href="BoardList.asp?page=<%=Page-1%>">이전</A> |
<%End If%>
<%If Cint(Page) <> Cint(Totalpage) then
For i=1 To Totalpage %>
<A href="BoardList.asp?Page=<%=i%>"><%=i%></A> |
<%
Next
%>
<A href="BoardList.asp?page=<%=page+1%>">다음</A>
<%End If%>
<%=Page%>/<%=Totalpage%>Pages <Br>
<Form method="post" action="search_result.asp">
<Select name="search">
<Option value="Title">글제목</option>
<Option value="Writer">글쓴이</option>
<Option value="Contents">글내용</option>
</Select>
<Input type="text" name="searchstring" size="20">
<Input type="submit" value="검색">
</Form>
<%End If%>
</Center>
</Body>
</Html>
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
데이터베이스 열기
레코드셋 열기
레코드셋 데이터 처리
레코드셋 종료
데이테베이스 연결 종료
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
2. OLE DB와 ADO

ADO 객체
OLE DB 제공자를 통해서 데이터를 다룸

OLE DB
프로그램에서 여러 형태의데이터를 다룰 수
있도록 제공된 컴포넌트
중간 역할을 하는 인터페이스

ADO 객체를 통해 데이터처리 요구 => OLE DB가 실제데이터
처리하여 요구사항을 넘겨줌
ADO
객체
OLE DB
ODBC
드라이버
데이터
제공자
DB
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 데이터 제공자



실제로 데이터를 처리해주는 드라이버와 엔진을 말함
ODBC 가 가장 대표적인 예
ADO 객체는 데이터 제공자가 지원하는 기능을 이용
. ADO 와 데이터 베이스
데이터 베이스를 다루는 객체
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
3. ADO 객체 모델

데이터 베이스를 다루는 기본 과정
1.
데이터 베이스 연결 (어느 데이터 베이스에 연결할지를 지정)
=> DSN 을 통해서 지정하고 연결
2. 명령 실행 : SQL 문을 실행하고나 명령실행
=> 레코드 검색, 추가, 삭제, 수정등
3. 실행 결과 : 조건에 맞는 레코드 검색시 레코드 셋으로 가져옴
(실제로 이용하는 값은 각 레코드가 가진 필드값)
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. ADO 객체 구성

ADO 객체 모델 : 데이터 베이스를 사용하는 데 필요한 객체
 Connection 객체 : 데이터 베이스 연결
 Command 객체 : SQL 쿼리 실행
 Recordset 객체 : 검색해서 얻어진 레코드 집합
 Record 객체
 Stream 객체
 Parameter 객체
 Field 객체
 Error 객체

Page 291 ADO 객체 모델 그림 참조
Chungbuk National University
2008 인터넷 실험
4. ADO 객체

Connection 객체
Comand 객체
Recordset 객체

각 객체마다 명령을 실행하고 결과를 받아옴


Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
. Connection 객체

데이터 소스와 연결

Connection 객체도 데이터 베이스에 연결만 하는 기능만 있는
것이 아니라 데이터베이스에 연결하여 명령을 실행하고 그 결
과를 보여줄 수 있는 메서드도 지원함
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. Command 객체

데이터 소스에 데이터를 다루는 명령을 보낼때 사용

Connection 객에서도 SQL 명령을 보내서 실행 가능(명령 처리
단순)

보통 SQL 실행결과로 레코드를 리턴하지 않는 경우에 많이 사
용 (데이터 추가/수정/삭제 )
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. Recordset 객체

Connection 객체와 Command 객체를 이용해서 명령을 실행 한
다음 받아오는 결과는 레코드 셋 형태이고, Recordset 객체를
통해 데이터 다룸

레코드 셋이란 여러 레코드를 담고 있는 객체

선택된 레코드는 하나이며 레코드 선택을 바꾸어가면서 데이
터 값을 가져오거나 변경 가능

레코드 검색뿐만아니라 추가/삭제/수정도 가능
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
5. ADO 상수



ADO 객체에서 사용하는 상수 값들은 파일 하나로 정의 되어
있음
파일 이름은 adovbs.inc => VBScript 를 이용해서 필요한 상
수 정의
파일 포함 방법
<!- - include file=“adovbs.inc”- ->

C:/Program Files / Common Files/System/ado 폴더에 존재

자바스크립트를 사용하는 파일이라면 adojavas.inc 파일을
포함
상수 파일을 포함하지 않고 타입 라이브러리를 선언해 주면
상수를 별도로 파일로 포함하지 않고서도 바로 사용가능

<! - - MetaData Type=“typelib”
Chungbuk National University
file=“c:/program files/Common
2008 인터넷 실험
3. ASP 고급 실험
6. 데이터 소스 연결
어디에 있는 데이터베이스를 사용할 것인가 선택하는 과정
(어떤 종류의 데이터베이스 이며, 어디에 위치하는 지 등등의 정보
필요)

Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 연결 문자열

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=;

Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
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
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. Connection 객체 이용



데이터 베이스를 이용할때 마다 필요한 객체므로 데이터베
이스를 사용하는 빈도수가 높은 경우 처음에 미리 한번 생성
해 두었다가 반복해서 사용하는 것이 효율
=> Connection 객체를 생성한 다음 이것을 Session 변수 또는
Application 변수로 보관해 놓고 이용
Global.asa 파일에서 지정
Chungbuk National University
2008 인터넷 실험
. 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
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
8. 데이터베이스 다루기-Recordset


ADO 객체 모델에서 가장 많이 사용하는 객체
이용방법
Recordset 객체 생성
Open 메서드로 레코드셋 가져옴 (인자 : 테
이블이름,DSN 지정)
Set rs = Server.CreateObject(“ADODB.Recordset”)
rs.Open “Member”,”WebDBs”
‘레코드셋 다루기
rs.Close
rs = Nothing
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 얻어내는 방법

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
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
.커서(Cursor)와 커서타입

커서 : 레코드 셋에서 현재 레코드를 가르키는 포인터

커서 타입 : 커서를 옮기는 방식(레코드를 이동 => 디폴트값
:adOpenForwardOnly)
adOpenStatic – 정적 커서(레코드셋의 복사본
제공, 모든 이동형태가능)
adOpenForwardOnly – 전진전용커서 (정적커
서와 비슷, 이동은 앞으로만)
adOpenDynamic – 다이나믹커서(레코드셋 갱
신 , 모든 이동형태 가능)
adOpenKeyset – 키셋 커서 (레코드셋 갱신(다
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 락(lock)과 락 타입

락(lock) : 한 사람이 사용하는 동안 다른 사람이 접근 불가능
(한 사용자가 레코드를 바꾸기 전에 다른 사용자가 바꿀 수
없음)

사용이 다 끝난다음 락(Lock)을 풀어줌
락타입

 adLockReadOnly:
데이터를 바꿀 수 없으며 읽을 수
만 있음
레코드 단위로 락을 걸며, 레코
드 편집을 하는 순간부터 레코드에 락을 건다.
 adLockOptimistic : 레코드 단위로 락을 걸며,
Update 메서드를 부르는 순간에만 락을 건다.
 adLockPessimistic:
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 레코드 셋 이동

레코드 셋을 열고 난 후 레코드 포인터를 바꾸면서 데이터를
다룸

레코드 이동 관련 Recordset 객체의 메서드/프로퍼티
EOF : 레코드셋 마지막을 읽었을 때 true 값
을 가짐
MoveNext : 그 다음 레코드로 이동
MovePrevious : 이전 레코드로 이동
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 레코드 필드 값

Recordset 객체의 Filed 콜렉션으로 접근

Filed 콜렉션은 디폴트 콜렉션으로 Filed콜렉션 이름 생략가능
rs.Fileds(“UserID”)
rs.(“UserID”)

필드의 이름을 모르는 경우 인덱스로 접근 가능
rs.Fileds( 0 )
rs.( 0 )
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 필드 이름과 값 보이기

필드의 값 구하기 (.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
%>
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 레코드 셋 가져오기

Recordset 객체의 Open 메서드를 이용하는 방법

Connection 객체의 Execute 메서드를 실행하고 결과를 리턴받는
방법
Chungbuk National University
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 관련 예제– 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
Chungbuk National University
2008 인터넷 실험
. 레코드셋 관련 예제 결과
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 관련 예제– 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
' 데이터베이스 닫기
Chungbuk National University
2008 인터넷 실험
. 레코드셋 관련 예제 결과
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 관련 예제– 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
' 데이터베이스 닫기
Chungbuk National University
2008 인터넷 실험
. 레코드셋 관련 예제 결과
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 활용예 – 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" )
%>
Chungbuk National University
2008 인터넷 실험
. 레코드셋 활용예 – ..이어서
<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>"
Chungbuk National University
3. ASP 고급 실험
2008 인터넷 실험
3. ASP 고급 실험
. 레코드셋 활용예 – ..이어서
' 필드 값 보여주기 레코드셋 끝을 읽을 때까지 반복 실행
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
Chungbuk
%>National University
2008 인터넷 실험
3. ASP 고급 실험
9. 레코드셋 활용예 -결과
9. 레코드셋 활용예
Chungbuk National University