3. ASP 고급 실험 Autumn, 2008 Keun Ho Ryu.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

2008 년 11 월 20 일 실습.  실험제목 ◦ 데이터베이스 커넥션 풀  목표 ◦ 데이터베이스 커넥션 풀의 사용.
양승혁 군산대학교 통계컴퓨터과학과 정보과학기술 연구실
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
웹 프로그래밍 HTML, 자바스크립트, ASP를 중심으로
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
학습목표 학습목표 이번 강좌에는 웹 프로그램에서 데이터베이스에 질의를 할 때에 어떤 방식으로 이루어지는가에 대한 내용들과 웹 프로그램과 데이터베이스를 연동하는데 필요한 작업들은 무엇이 있는지에 대하여 학습을 한다. 대표적인 웹 프로그래밍 언어중의 하나인 ASP를 사용하여.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
주)INVENTORNICS 노창배 소프트웨어 김 경 순
C#에서 데이터베이스 연동 방법.
11장 방명록 한빛미디어(주).
제 9 장 구조체와 공용체.
JSP Programming with a Workbook
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
13장. 자바빈과 데이터베이스를 연동한 게시판 시스템
Web Server와 DB 연동.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
주)INVENTORNICS 노창배 소프트웨어 김 경 순
14장 질의응답 한빛미디어(주).
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
ASP.NET : Database 접근 2008 컴퓨터공학실험(Ⅰ)
9. 데이터베이스 9.7 데이터베이스 기술 이야기.
5장. 참조 타입.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
KHS JDBC Programming 4 KHS
예제로 배우는 Visual Basic 구구단 작성기로 익히는 반복문
11장. 1차원 배열.
DB연동하기 원격db접속.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
You YoungSEok Oracle 설치 You YoungSEok
주)INVENTORNICS 노창배 소프트웨어 김 경 순
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
CHAP 13. 방명록 만들기 실습.
게임웹사이트운영 [10] 폼 작성.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Ⅰ. ASP개체 모델 Ⅱ. Request 개체 그렇다면 프로그래밍 언어를 수행하는 컴퓨터의 개념적인 구조를 살펴 본다면, 프로그래밍 언어가 무엇인지 이해하는데 도움이 될 것입니다. 현재 컴퓨터 구조의 모태가 되고 있는 폰 노이만 구조는 그림에서 보는 것과 같이, 명령어와.
ADO.NET (SqlConnection, SqlCommand)
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
OpenCV 설정 2.21 만든이 딩딩.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 23 장 오라클에서 보안 기능.
함수, 모듈.
9 브라우저 객체 모델.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Data Base Web Programming
 6장. SQL 쿼리.
7 생성자 함수.
6 객체.
20 XMLHttpRequest.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

3. ASP 고급 실험 Autumn, 2008 Keun Ho Ryu

내용 학습목표 학습내용 ADO 객체를 이용하여 데이터베이스를 사용하고 이를 활용할 수 있다. 데이터베이스 SQL 데이터베이스와의 연결 ADODB 관련 객체 Connection객체, Command객체, RecordSet객체

객체의 종류 스크립팅 객체 브라우저 객체 ASP 객체 ADO 객체 FileSystemObject, Dictionary Request, Response Server Application, Session ContextObject ADO 객체

데이터베이스 데이터베이스의 기본 개념 데이터베이스(이름:Pubs) 데이터베이스(이름:Test) 데이터베이스(이름:ADO) 비밀번호 아이디 이름 Members … 글내용 글쓴이 번호 Board 2000 5 222222 꼴뚜기 333333 111111 일련번호 3000 망둥어 1000 메뚜기 재고수량 단가 품명 Products 테이블명 데이터베이스명 필드 레코드 레코드 셋 필드명

MS-SQL Server 데이터베이스 : Access, Oracle, MS-SQL 등 MS-SQL

MS-SQL erver SystemTypes

MS-SQL Server SystemTypes- 문자열 관련 분류 데이터 형식 설 명 문자열 char 설     명 문자열 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 바이트)

MS-SQL Server SystemTypes- 숫자 관련 분류 데이터 형식 설 명 숫자 (정수) bigint 설     명 숫자 (정수) 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)

MS-SQL Server SystemTypes- 날짜 관련 분류 데이터 형식 설 명 날짜 datetime 설     명 날짜 datetime 날짜 및 시간 데이터(1753년 1월 1일에서 9999년 12월 31일까지 1/300초의 정확성을 가짐) smalldatetime 날짜 및 시간 데이터(1900년 1월 1일에서 2079년 6월 6일까지 1분의 정확성을 가짐)

MS-SQL Server SQL-테이블 생성 CREATE TABLE 테이블명(     필드명 데이터형 [IDENTITY][널값 허용 여부][Primary Key],      ... ) SQL-테이블 생성

MS-SQL Server SQL-데이터 입력(삽입) INSERT [INTO] 테이블명 (필드리스트)     테이블명 (필드리스트)     VALUES (필드값리스트)

MS-SQL Server SQL-데이터 질의(검색) SELECT 필드리스트 FROM 테이블명 [WHERE 검색조건]     [ORDER BY 필드 [ASC | DESC]

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

MS-SQL Server SQL-데이터 수정(Update) UPDATE 테이블명     SET 필드명=표현식     [WHERE 수정조건]

MS-SQL Server SQL-데이터 삭제 DELETE [FROM] 테이블명     [WHERE 삭제조건]

MS-SQL Server SQL-저장 프로시저 만들기 CREATE PROC[EDUER] 프로스저명 [;번호][{@입력인자 데이터형식}] AS SQL문장들......

MS-SQL Server SQL-저장 프로시저 실행 EXEC[UTE]] 프로시저명 [;번호] | {@입력인자의 값}

MS-SQL Server SQL-저장프로시저 삭제 DROP PROC[EDURE] 프로스저명

MS-SQL Server SQL-테이블 삭제

데이터베이스 연결 제공 데이터베이스 연결의 대표적인 방법 기타 ODBC(Open DataBase Connectivity) 관계형 데이터베이스 OLEDB 관계형 데이터베이스, 비관계형 데이터베이스 기타 DAO, RDO  웹 환경에 적합하지 않음

데이터베이스 연결-ODBC ODBC 설정 단계(1)

데이터베이스 연결-ODBC ODBC 설정 단계(2)

데이터베이스 연결-ODBC ODBC 설정 단계(3)

데이터베이스 연결-ODBC ODBC 설정 단계(4)

데이터베이스 연결-OLEDB OLEDB 설정 단계 더블클릭

데이터베이스 연결-OLEDB OLEDB 설정 단계

ADO 객체 모델 ADO 객체 모델 데이터베이스의 사용에 필요한 객체의 모음 ADO 객체의 종류 객체의 종류 설 명 설     명 Connection 데이터베이스와의 연결하고 SQL문을 실행. Command 여러 가지 명령 처리 방법 존재. Recordset 데이터베이스 질의를 통해 얻은 레코드 셋을 저장. Record 레코드 셋, 디렉터리, 모든 파일 시스템 파일에서 한 행(Row)을 유지 Stream Binary 데이터 또는 텍스트를 읽고, 쓰고, 조작.

ADO 객체 모델 Connection 객체의 기능 데이터 소스에 SQL명령을 실행 트랜잭션 처리 에러 처리 데이터베이스와의 연결 설정 Open, Close 데이터 소스에 SQL명령을 실행 Execute 트랜잭션 처리 BeginTrams, CommitTrans, RollbackTrans 에러 처리 Error

ADO 객체 모델 Connection 객체의 메소드 메소드 설 명 BeginTrans 새로운 트랜잭션을 시작 Cancel 설   명 BeginTrans 새로운 트랜잭션을 시작 Cancel 비동기적인 작업들을 취소 Close 기존 열린 연결 종료 CommitTrans 수정 내용을 저장하고 트랙잭션을 종료 Execute SQL 문장, 저장 프로시저 실행 Open 데이터 소스에 연결 OpenSchema 제공자(Provider)로부터 데이터베이스 스키마 획득 RollbackTrans 수정 내용을 취소하고 트랜잭션을 종료

ADO 객체 모델 Connection 객체의 속성 속성 설 명 Attributes 설   명 Attributes 기존 트랜잭션이 끝난 뒤 새로운 트랜잭션의 시작 여부를 제어 ConnectionString 데이터 소스 연결을 생성하는 데 필요한 정보 CommandTimeout 명령을 시도한 다음 기다리는 시간(초) ConnectionTimeout 연결을 시도한 다음 연결될 때까지 기다리는 시간(초) DefaultDatabase Connection 개체에 대해 기본적인 데이터베이스를 선언 Provider 연결 제공자 정보 표시 State 개체의 상태 표시 Version ADO 버전 표시 IsolationLevel 트랜잭션이 시작되었을 때 트랜잭션의 Isolation 수준을 결정 Mode 연결된 데이터에 대한 수정 권한을 설정

ADO 객체 모델 Connection 객체의 메소드 Open Connection객체.Open [ConnectionString], [UserID], [Password], [Option] Connection객체.Provider = 공급자 Connection객체.ConnectString="UserID=사용자계정;password=암호" Connection객체.Open Connection객체.DefaultDatabase = 데이터베이스명

CommandText에 의해 영향을 받은 레코드의 개수 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]) 상  수 값 설     명 adCmdUnknown 8 CommandText가 알 수 없는 명령 형식 adCmdText 1 CommandText가 SQL 문장과 같은 명령의 텍스트 adCmdTable 2 CommandText가 레코드셋의 근거가 되는 테이블 adCmdStoreProc 4 CommandText가 저장 프로시저 반환값이 없는 SQL문, 반환값 있는 SQL문, 테이블이름, 저장프로시저 CommandText에 의해 영향을 받은 레코드의 개수

ADO 객체 모델 ADO관련 상수 정의 상 수 값 설 명 adCmdUnknown 8 상  수 값 설     명 adCmdUnknown 8 CommandText가 알 수 없는 명령 형식 adCmdText 1 CommandText가 SQL 문장과 같은 명령의 텍스트 adCmdTable 2 CommandText가 레코드셋의 근거가 되는 테이블 adCmdStoreProc 4 CommandText가 저장 프로시저

ADO 객체 모델 ADO관련 상수의 사용 Adovbs.inc의 상수 사용 <!--#include virtual="adovbs.inc" --> <!--METADATA TYPE="typelib" NAME="ADODB Type Library"     FILE = "C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" -->

ADO 객체 모델 Connection 객체의 메소드 Close Connection객체.Close ‘ 연결만 닫음 Connection객체 = Nothing ‘객체를 소멸시킴

ADO 객체 모델 Connection 객체의 메소드 트랜잭션 관련 처리 Connection객체.[BeginTrans | CommitTrans | RollbackTrans]

ADO 객체 모델 예제

  BoardWrite.asp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <HTML> <Script Language="VBScript"> Sub btnSend_OnClick   If(WriteForm.Writer.value = "") Then      alert "이름을 입력해 주세요..."      Exit Sub   End If        If(WriteForm.Title.value = "") Then      alert "제목을 입력해 주세요..."   End If            If(WriteForm.Contents.value = "") Then      alert "글을 작성해 주세요..."   End If     If(WriteForm.pwd.value = "") Then      alert "비번은 수정/삭제시 필요합니다."   End If          WriteForm.submit End Sub </Script> <Body> <Form Name="WriteForm" Method="Post" action="BoardDB.asp"> <Table><Caption>새글쓰기</Caption> <Tr><Td>글쓴이</Td>      <Td><input type="text" name="Writer" size="20"></Td></Tr> <Tr><Td>e-mail</Td>      <Td><input type="text" name="Email" size="30"></Td></Tr> <Tr><Td>homepage</Td>         <Td><input type="text" name="Homepage" size="30"></Td></Tr> <Tr><Td>글제목</Td>             <Td><input type="text" name="Title" size="30"></Td></Tr> <Tr><Td>글내용</Td>             <Td>      <textarea wrap="hard" name="Contents" rows="10" cols="50">         </textarea></Td></Tr> <Tr><Td>비밀번호</Td>             <Td><input type="password" name="pwd" size="8"><br></pre></Td></Tr> <Tr><Td Colspan="2">       <Center><input type="button" value="글올리기" name="btnSend">    <input type="reset" value="다시쓰기" name="reset"><br></Center></Td></Tr> </Table> </Form> </BODY> </HTML>

  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")

DB 연결 질의 수행 반환된 레코드셋의 처리 SQL문 문자열 만들기 SQL문 실행 (트랜잭션처리) 연결 끊기 및 객체 소멸   BoardDB.asp 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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=objCon.Execute("Select Max(num) from Board") If IsNull(RS(0)) Then     intNumber=1 Else     intNumber=rs(0)+1 End If SQL="Insert Into Board(Writer, Email, Homepage, Title, Pwd, num, " SQL=SQL & "Writeday, ReadNum, Contents) Values" SQL=SQL & "('" & Writer & "' ,'" SQL=SQL & Email & "','" SQL=SQL & Homepage & "','" SQL=SQL & Title & "','" SQL=SQL & pwd & "'," SQL=SQL & intNumber & ",'" SQL=SQL & now() & "', 0 , '" SQL=SQL & Contents & "')" objCon.BeginTrans   objCon.Execute SQL objCon.CommitTrans  'objCon.RollbackTrans    RS.close   objCon.Close   set Rs=Nothing   set objCon=Nothing Response.Write "성공"  'Server.Transfer("BoardList.asp") %> DB 연결 질의 수행 반환된 레코드셋의 처리 SQL문 문자열 만들기 SQL문 실행 (트랜잭션처리) 연결 끊기 및 객체 소멸

ADO 객체 모델 Command 객체의 기능 SQL문과 저장 프로시저를 실행

ADO 객체 모델 Command 객체의 메소드 메 소 드 설 명 CreateParameter 설     명 CreateParameter Parameters 컬렉션에 새로운 Parameter 객체 생성 Execute 명령어 실행 Cancel 비동기적인 명령 작업을 취소

ADO 객체 모델 Command 객체의 속성 속성 설 명 ActiveConnection 설     명 ActiveConnection Command 객체에서 사용하는 Connection 객체 CommandTimeout 명령을 시도한 다음 기다리는 시간(초) CommandText 실행할 SQL문 CommandType 실행할 명령어의 타입 Prepared 명령문을 실행하기 전에 컴파일 된 버전의 저장 여부를 결정 Properties Command 객체의 모든 속성 등을 저장하는 컬렉션 State Command 객체의 상태

ADO 객체 모델 Command 객체의 메소드 DB 연결(ActiveConnection 속성)   Set objCon=Server.Create("ADO.Connection")   Set objCom=Server.Create("ADO.Command")   objCon.Open = "연결 문자열"   objCom.ActiveConnection = objCon Set objCom=Server.Create("ADO.Command")   objCom.ActiveConnection = "연결문자열"

ADO 객체 모델 Command 객체의 메소드 Execute 반환값이 없는 경우 반환값이 있는 경우(RS는 레코드 셋) Command객체.Execute([RecoedAffected], [Parameters], [Options]) Set RS=Command객체.Execute([RecoedAffected], [Parameters], [Options]) 

ADO 객체 모델 Command 객체의 메소드 CreateParameter 메소드 Set parameter     = Command객체.CreateParameter([Name], [Type], [Direction], [Size], [Value]) 객체의 이름 객체의 최대 크기 객체에 지정된 값 객체의 데이터 형식(SQL:DataTypeEnum상수) char:adchar, varchar:adVarChar, int:adInteger, text:adVarChar 등 0: adParamUnknown, 속성을 알 수 없음을 표시 1: adParamInput, 입력 변수임을 표시(기본값) 2: adParamOutput, 출력 변수임을 표시 3: adParamInputOutput, 입력, 출력 동시 지원 4: adParamReturnValue, 반환 값임을 표시

ADO 객체 모델 Command 객체의 메소드 Parameters 컬렉션의 메소드 사용 형식의 예 메소드 설 명 Append 설     명 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)

ADO 객체 모델 예제

저장 프로시저 생성

Set objCon=Server.CreateObject("ADODB.Connection") 요청 자료 넘겨 받기 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

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") %>

ADO 객체 모델 RecordSet 객체의 기능 SQL문의 실행으로 반환되는 결과를 저장하는 역할 RecordSet을 이용하여 추가(AddNew), 수정(UpDate)등을 작업을 수행 레코드 사이를 이동하면서 필요한 데이터를 읽어 들임

ADO 객체 모델 RecordSet 객체의 기능 SQL문의 실행으로 반환되는 결과를 저장하는 역할 RecordSet을 이용하여 추가(AddNew), 수정(UpDate)등을 작업을 수행 레코드 사이를 이동하면서 필요한 데이터를 읽어 들임

RecordSet(RS) Absolutepage=1 Absolutepage=2 MoveFirst PageSize=5 RS.BOF Absolutepage=2 MoveFirst 5 PageSize=5 Absolutepage=3 MoveLast RS.EOF 5 Absolutepage=4 1 PageCount=4 페이지 나누기 전 페이지 나눈 후

ADO 객체 모델 RecordSet 객체의 메소드 MoveFirst MoveLast 메소드 설 명 Open 커서 열기 RS.BOF RS.EOF MoveFirst MoveLast 메소드 설     명 Open 커서 열기 Close 열린 개체 닫기 AddNew 새로운 레코드 생성 Delete 현재 레코드 삭제 Update 기존 레코드 변경 사항 저장 Move 현재 레코드 포인터를 이동 MoveFirst 처음 레코드로 이동 MoveLast 마지막 레코드로 이동 MoveNext 다음 레코드로 이동 MovePrevious 이전 레코드로 이동

RecordSet 객체의 속성 ADO 객체 모델 속성 설 명 AbsolutePage 현재 레코드가 위치한 절대 페이지 설     명 AbsolutePage 현재 레코드가 위치한 절대 페이지 AbsolutePosition 현재 레코드가 순서 위치 ActiveConnection 레코드셋에 있는 Connection 개체 BOF 현재 레코드 위치가 첫 번째 레코드에 있으면 TRUE EOF 마지막 레코드 다음에 레코드 위치가 있으면 TRUE CursorType 커서 타입 LockType 락 타입 PageSize 하나의 페이지를 구성하는 레코드 수 지정 PageCount 레코드셋이 가지고 있는 데이터 페이지 수 RecordCount 현재 레코드셋에 있는 레코드 수 Filter 레코드셋에 대한 데이터 필터를 설정하거나 반환 현재 레코드셋 내에 있는 레코드의 개수

adLockBatchOptimistic ADO 객체 모델 RecordSet 객체의 메소드 Open RecordSet.Open Source ActiveConnection, [Cursor타입], [Lock타입], [옵션] Command 객체, SQL문장, 테이블 이름, 저장 프로시저 기존의 Connection 객체, 연결 문자열 adLockReadOnly adLockPessimistic adLockOptimistic adLockBatchOptimistic adOpenStatic : 3 adOpenForwardOnly : 0 adOpenDynamic : 2 adOpenKeyset : 1 (페이징)

<% 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 %>

<HTML><BODY> <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>       </Tr>       <%       RS.Movenext       i=i+1     Loop                              RS.Close     objCon.Close     Set RS=Nothing     Set objCon=Nothing   %> </Table>

                    <%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>    <%=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>

데이터베이스 열기 레코드셋 열기 레코드셋 데이터 처리 레코드셋 종료 데이테베이스 연결 종료

2. OLE DB와 ADO OLE DB 제공자를 통해서 데이터를 다룸 프로그램에서 여러 형태의데이터를 다룰 수 있도록 제공된 컴포넌트 중간 역할을 하는 인터페이스 ADO 객체를 통해 데이터처리 요구 => OLE DB가 실제데이터 처리하여 요구사항을 넘겨줌 데이터 제공자 ADO 객체 ODBC 드라이버 OLE DB DB

. 데이터 제공자 . ADO 와 데이터 베이스 실제로 데이터를 처리해주는 드라이버와 엔진을 말함 ODBC 가 가장 대표적인 예 실제로 데이터를 처리해주는 드라이버와 엔진을 말함 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 객체 데이터 소스와 연결

. Command 객체 데이터 소스에 데이터를 다루는 명령을 보낼때 사용 Connection 객에서도 SQL 명령을 보내서 실행 가능(명령 처리 단순) 보통 SQL 실행결과로 레코드를 리턴하지 않는 경우에 많이 사용 (데이터 추가/수정/삭제 )

. Recordset 객체 Connection 객체와 Command 객체를 이용해서 명령을 실행 한 다음 받아오는 결과는 레코드 셋 형태이고, Recordset 객체를 통해 데이터 다룸 레코드 셋이란 여러 레코드를 담고 있는 객체 선택된 레코드는 하나이며 레코드 선택을 바꾸어가면서 데이터 값을 가져오거나 변경 가능 레코드 검색뿐만아니라 추가/삭제/수정도 가능

5. ADO 상수 <!- - include file=“adovbs.inc”- -> 파일 이름은 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 </script>

8. 데이터베이스 다루기-Recordset 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)와 커서타입 adOpenStatic – 정적 커서(레코드셋의 복사본 제공, 모든 이동형태가능) 커서 : 레코드 셋에서 현재 레코드를 가르키는 포인터 커서 타입 : 커서를 옮기는 방식(레코드를 이동 => 디폴트값:adOpenForwardOnly) adOpenStatic – 정적 커서(레코드셋의 복사본 제공, 모든 이동형태가능) adOpenForwardOnly – 전진전용커서 (정적커서와 비슷, 이동은 앞으로만) adOpenDynamic – 다이나믹커서(레코드셋 갱신 , 모든 이동형태 가능) adOpenKeyset – 키셋 커서 (레코드셋 갱신(다른 사용자가 추가한 레코드만 볼수 없음), 모든 이동형태 가능) 다이나믹하게 변하는 레코드 셋을 다루는 것이 관리하는 데 많은 작업을 요구 ADO 상수 포함후 사용

. 락(lock)과 락 타입 락(lock) : 한 사람이 사용하는 동안 다른 사람이 접근 불가능 (한 사용자가 레코드를 바꾸기 전에 다른 사용자가 바꿀 수 없음) 사용이 다 끝난다음 락(Lock)을 풀어줌 락타입 adLockReadOnly: 데이터를 바꿀 수 없으며 읽을 수만 있음 adLockPessimistic: 레코드 단위로 락을 걸며, 레코드 편집을 하는 순간부터 레코드에 락을 건다. adLockOptimistic : 레코드 단위로 락을 걸며, Update 메서드를 부르는 순간에만 락을 건다. adLockBatchOptimistic : 배치 갱신 모드 요구

. 레코드 셋 이동 EOF : 레코드셋 마지막을 읽었을 때 true 값을 가짐 MoveNext : 그 다음 레코드로 이동 레코드 셋을 열고 난 후 레코드 포인터를 바꾸면서 데이터를 다룸 레코드 이동 관련 Recordset 객체의 메서드/프로퍼티 EOF : 레코드셋 마지막을 읽었을 때 true 값을 가짐 MoveNext : 그 다음 레코드로 이동 MovePrevious : 이전 레코드로 이동

. 레코드 필드 값 rs.Fileds(“UserID”) rs.(“UserID”) rs.Fileds( 0 ) rs.( 0 ) Recordset 객체의 Filed 콜렉션으로 접근 Filed 콜렉션은 디폴트 콜렉션으로 Filed콜렉션 이름 생략가능 rs.Fileds(“UserID”) rs.(“UserID”) 필드의 이름을 모르는 경우 인덱스로 접근 가능 rs.Fileds( 0 ) rs.( 0 )

. 필드 이름과 값 보이기 rs.Filed( 0 ).value 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. 레코드셋 활용예