지금부터 하고자 하는 것은 ADO를 이용하여 DB(Data
Base)를 조작하는 방법을 공부하겠습니다.
모든 Server Side Script 언어가 그렇듯이 DB를 다루지 못하면 별루 필요가 없겠죠.
DB와 연동을 시킴으로 진정한 웹페이지가 탄생하는것입니다.
DB가 사용되는 곳은 게시판, 방명록, 또 다움의 카페도 이러데이터 베이스를 사용하여 카페를 관리하고
만들어 주고 그렇게 하는걸로 알고 있습니다.
더 나아거서는 홈페이지 자체를 DB 에 넣는다는 말도 있고 어떤 동영상을 DB에 넣어서 검색 가능하게
한다는 말도 떠돌고 있습니다.
그럼 우리가 해야 할 것은 모두들 접근하기 쉬운 MS-Access로만든 *.mdb 파일을 다루는
방법을 배우고 겠습니다.
그리고 ODBC를 사용하여 접근하는 방법이 있고 ODBC를 사용하지 않는 방법이 있는데 제가 .net
세미나를 들어 보니까. ODBC를 사용하는건 에러발생이 많고 속도가 느려지고 부하가 많다고 ADO에
직접 연결하는편이 좋은 선택이라고 하기에 직접연결해서 쓰도록 하겠습니다.
이 ADO 는 PWS, IIS 설치시 자동으로 설치됩니다.^^
ADO는 ADO.net이 있을 만큼 거대합니다.
하지만 정말 필요하는 부분은 조금뿐입니다. 다 알필요는 없습니다.
다음 몇 개만 알면 하고자 하는 모든일을 할 수 있을 것입니다.
(DB를 사용하는건 파일을 사용하는것과 비슷합니다. DB도 하나의 파일이죠!!)
순서
1. DB파일을 열어 헨들을 얻는다. 얻을적에 (ADODB.Connection) 2. DB파일의 SQL문을 던져 레코드셋을 얻는다(Set RS = Conn.Execute(mySQL)) 3. 그 레코드들을 사용하여 읽고, 쓰고, 갱신 한다. 4. DB를 위해 할당했던 자원들을 돌려 준다. |
너무 어렵죠.. 그럼 실전 예제를 하나 만들어 보죠..
만약 MS-Access 프로그램이 있으신분은 test.mdb파일을 만드시고 없으신분은 게시판에서 다운로드 받으세요^^
파일의 위치는 : C:\test.mdb
테이블 내용 테이블명 : 메모
자 그럼 간단하게 메모장의 일부만 보여 드리도록 하겠습니다.
일단. 데이터가 있다고 가정하고 읽어 오는 것을 하겠습니다.
물론 이게 전부가 아닙니다. 하나의 레코드만 읽어
오는 것을 만들었지만 Do While 문을 이용하여 많은 레코드들을 읽어오고.. 삽입, 삭제, 수정까지
가능하게 만들어야 하죠.
Default.asp 파일이죠..
<% Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체 Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\test.mdb" ' DB 열기 mySQL = "SELECT * FROM 메모" Set RS = Con.Execute(mySQL) ' Execute함수의 반환형이 Recordset이에요.. Response.write RS("memo_ID") & " " & RS("이름") & " " & RS("내용") & " " & RS("날짜") & " " & RS("이메일") RS.Close Set RS = Nothing Con.Close Set Con = Nothing %> |
아주 기초적인 데이터 베이스 다루는 방법을 다루었습니다.
이걸 확장해서 간단한 메모장은 ADO의 전반적인 것을 보고 만들어 보도록 하겠습니다.^^
1. ADO architecture(아키텍쳐) :전체적 구조입니다.
ADODB.Command 개체 ADODB.Connection 개체 ADODB.DataControl 개체 ADODB.DataFactory 개체 ADODB.DataSpace 개체 ADODB.Error 개체 ADODB.Field 개체 ADODB.Parameter 개체 ADODB.Property 개체 ADODB.RecordSet 개체 |
이쿠 이많은 개체들을 다 알아야 하는가??
이걸 다 알 필요도 없고 알아도 필요한게 많이 없기 때문에 가장 필요한 두가지만 다루도록 하겠습니다.
더 아시고 싶으시면 MSDN을 참고하세요^^
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/dasdkadooverview.asp
1.1 Connection 개체
이 개체는 데이터베이스와 연결 및 실행에 관한 기능들을 모아둔 꼭 필요한 개체이다.
속 성 |
||
ConnectionTimeout |
연결시간을 지정하거나 반환(Default = 15초) |
|
ConnectionString |
연결을위한 문자열이 들어간다. open 메서드 뒤에 두어도 된다. |
|
DefaultDatabase |
기본으로 사용할 데이터 베이스 이름 설정, 반환 |
|
메 서 드 |
||
Open |
DB와 연결확립. |
|
Execute |
SQL문 실행 :SQL문은 본 홈페이지 mySQL강좌의 기초를 참조 하세요^^ |
|
Close |
DB를 열었으면 닫아 두어야죠^^ |
|
BeginTrans |
트랜잭션을 시작한다. |
|
CommitTrans |
변경내용을 저장하고 트랜잭션을 끝낸다. |
|
RollbackTrans |
변경내용을 취소하고 트랜잭션을 끝낸다. |
|
Cancel |
Open, Execute 함수의 호출을 취소. |
|
컬 렉 션 |
||
Properties |
Connection의 속성들 |
|
Errors |
연결에 대한 에러들... |
1.2 Recordset개체
데이터를 조작하거나 조회하는데 사용. 질의어의 결과 레코드를 가지는 객체, 지속적인 연결이 필요하지 않을 경우 사용한다.
속 성 |
|
CursorType |
커서형식 지정 및 반환 .adOpenForwardOnly(0): 커서를 앞으로만 이동, 순차적으로 한번만 참조시 우수(default) .adOpenKeyset(1): 원하는 방향 모든 이동 가능, 변경내용 볼 수 있 으나 추가 삭제 내용 볼 수 없다. .adOpenDynamic(2):원하는 방향 모든 이동가능, 삭제, 삽입, 변경 모두 볼 수 있다.(○) .adOpenStatic(3): 원하는 방향 모든 이동가능, 삭제, 삽입, 변경 모두 볼 수 없다.(×)--> 이걸 많이사용 .adOpenUnspecified(-1): 커서유형 지정 안함 |
LockType |
레코드 작업시 잠금형식 지정. .adLockReadOnly(1):읽기 전용으로 잠금 (Default) .adLockPessimistic(2):수정시 자금 .adLockOptionistic(3):Update함수를 호출시 잠금 .adLockBatchOprimistic(4):일괄처리모드로 잠금 .adLockUnspecified(-1):유형지정안함. |
BOF |
Bottom Of File (레코드의 처음) |
EOF |
End Of File (레코드의 마지막) |
PageSize |
구성될 페이지의 레코드 수.. |
AbsolutePage |
해당 페이지의 첫 번째 레코드로 이동 |
PageCount |
페이지의 총개수 |
메 서 드 |
|
Open |
커서를 연다. RS.Open SQL문, Con, Cursortyp, locktyp, Options |
MoveFirst |
커서 위치를 첫 번째 레코드로 이동 |
MoveNext |
커서 위치를 다음 레코드로 이동 |
MovePrevious |
커서 위치를 이전 레코드로 이동 |
MoveLast |
커서 위치를 마지막 레코드로 이동 |
Move |
레코드의 위치 이동 RS.Move 레코드수, 시작값 -시작값- .adBookmarkCurrent: 현재 레코드를 시작위치로 .adBookmarkFirst :제일 첫 번째 레코드를 시작위치로 .adBookmarkLast:제일 마지막 레코드를 시작위치로 |
AddNew |
새레코드를 만든다 |
Update |
레코드 변경 |
Delete |
레코드 내용삭제 |
이 밖에 많은 속성, 메서드가 있지만 이것만을 사용하도록 하겠다.
●간단한 메모장
그럼 지금부터 위에서 다룬 내용을 기본으로 해서 간단한 메모장을 만들어 보도록 하죠^^
메모장의 기능: (글보기,글쓰기) 두가지 기능 구현 아주 간단
1. DB 설계
파일의 위치는 : C:\myDB.mdb <- DB파일은 다른곳에 두어야죠^^
테이블 내용 테이블명 : 메모
2. 디렉토리
기본 webroot에서 memo라는 디렉토리를 만든다. 그리고 파일구성은 다음과 같다.
webroot\memo\메모.asp <- 메모를 보여주는데 사용
삽입.asp <- 메모를 삽입할시 사용
3. 소스코드
-- 메모.asp --
<%
Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체
Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기
mySQL = "SELECT * FROM 메모 ORDER
BY memo_ID DESC"
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open mySQL,Con, 3 ' 앞의내용을 참조 하세요
RS.PageSize =13 ' 13칸
cPage = Request.QueryString("cPage")
if cpage ="" then
RS.AbsolutePage = 1 ' 1페이지로 설정
else
RS.AbsolutePage = cPage ' 현페이지 설정
end if
If Not (RS.EOF and RS.BOF) then ' 끝, 처음이 아니면.
i = 1
%>
<table border=1>
<tr>
<td>번호</td><td>메모</td><td>이름</td><td>날짜</td>
<%
Do until RS.EOF Or i > RS.PageSize
%>
<tr>
<td><%=RS("memo_ID")%></td><td><%=RS("내용")%></td>
<td><a href="mailto:<%=RS("이메일")%>"><%=RS("이름")%></a>< /td><td><%=RS("날짜")%></td>
</tr>
<%
RS.Movenext
i = i + 1
Loop
end if
page_s = cpage - 5 ' 앞으로 5레코드
page_e = cpage + 5 ' 뒤로 5레코드
if page_s <= 0 then page_s = 1 ' 현 레코드 보다 적으면
if page_e >= RS.PageCount then page_e = RS.PageCount ' 끝이상 이면
for i =page_s to page_e
%></table><a href="메모.asp?cPage=<%=i%>"><%=i%></a>
<%next
' 자원 반납
RS.Close
Set RS = Nothing
Con.Close
Set Con = Nothing
%>
<hr>^^ 작성하기 ^^
<form method=post Action="삽입.asp">
이름<input type=text name="이름"> E-mail<input type=text name="이메일">
내용<input type=text name="내용"> <input type=submit name="작성" value="작성">
</form>
-- 삽입.asp --
<%
IF REQUEST.FORM("이름") ="" OR REQUEST.FORM("이메일") ="" OR REQUEST.FORM("내용") ="" THEN
RESPONSE.WRITE ("이름, 이메일, 내용 모두 입력 하세요")
ELSE
Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체
Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기
' 레코드 삽입
mySQL = "INSERT INTO 메모 (이름,내용,이메일,날짜) VALUES ('" & REQUEST.FORM("이름") &"','" & REQUEST.FORM("내용")&"','" & REQUEST.FORM("이메일") &"','" &DATE() & "')"
Con.Execute (mySQL)
Con.Close
Set Con = Nothing
Response.Redirect "메모.asp"
END IF
%>
실행결과...
쑁쑁쑁 너무 볼 것 없죠.. 여기서 디자인만 조금 하면 .. 이쁜 메모장이 되는것이죠... 그리구 ..
그럼 다음에는 이쁘게 디자인 해서 올리겠습니다.^^ 위에것은 단지.. asp학습을 위해 만든것이죠..
html과 javascript를 이용하면 더 이쁘고
더 멋진 메모장이 가능하죠..
댓글 없음:
댓글 쓰기