강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

[펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1
작성자 : M 최고의하루
등록날짜 : 2008.12.23 09:32
9,482
1) DSN(Data Source Name)와 ODBC(Open Data Base Connectivity)생성
 
 DB를 다루기 위한 공부를 시작하기전 꼭 이해하고 넘어가야할 부분입니다. 많이들 들어보셨겠지만 DB시스템에는 여러가지가 있습니다. Oracle, MS-SQL등이 많이 쓰이고 좀더 쉬운것으로 Access가 있습니다. 그리고 컴퓨터의 운영체제에도  윈도우,유닉스,리룩스,맥킨토시등 여러가지가 있죠. 그러면 각 운영체제마다 사용해야할  특정 DB가 있는걸까요?  운영체제마다 사용해야만할 DBS가 따로 있다면 사용하기가 정말 불편할 것입니다.이렇게 각각의 운영체제와 DB들의  상호호환을 위해 필요한것이 ODBC입니다. 즉 각기다른 운영체제나 응용프로그램들 과 DB간의 인터페이스를 위한 매개체로 생각하시면 쉽겠지요. 그리고 DSN이란것은 우리가 서버를 이용할때 가상디렉토리와 물리적 디렉토리를 사용하듯이 DB에 접근할때에도 일종의 가상개념의 이름을 사용하여 접근하게 되는데 이것을 DSN이라 합니다. 역시 ODBC에서 지정해줍니다. 그러므로 ADO객체등에서 DB을 액세스 할 때에는 실제 DB이름을 지정하는것이 아니라 DSN으로써 DB를 관리할 수 있습니다.

다음은 Access를 이용한 설정법입니다.

2000765716_b7b068dc_1.gif

2000765716_a27f987f_2.gif
2000765716_822744ad_3.gif
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?XML:NAMESPACE PREFIX = O />

2000765716_4dc3ba8d_4.gif
위의 데이터소스이름(DSN)은 프로그래밍에서 사용할 DB의 이름입니다.

2000765716_dafe97c1_5.gif

2000765716_d3c60e27_6.gif

2000765716_c334a4b6_7.gif
 

2) ADO객체

이제 본격적으로 DB를 다루기 위한 테크닉으로 들어갑니다.

 [ADO객체모델]
 

Connection
       객체

콜렉션

 Errors : 에러를 체크하는 정보를 가짐 

 properties : 아래사항들

속성

 ConnectionString : 데이타소스연결시 필요한 정보

 CommandTimeOut : 명령을 내린 후 지연시간(초단위)

 ConnectionTimeOut : 연결될때까지의 지연시간(초단위)

 Attribute : 기존 트랜잭션의 종료후 새 트랜잭션의 시작여부 제어 

메서드

 Open() : 데이터소스의 연결

 Close() : 데이터소스 연결상태 종료

 Execute() : SQL실행과 저장프로시저실행 

 BeginTrans() : 새 트랜잭션 시작

 commitTrans() : 수정내용을 저장 & 트랜잭션 종료

 RollbackTrans() : 수정내용을 취소 & 트랜잭션 종료

하위객체

 Error

 Property 

Command
       객체

콜렉션

 Parameters : 쿼리를 실행하는데 필요한 인자값을 미리정의 

 parameter   
  객체

속성

 Count : 콜렉션의 개수 

 Item : 콜렉션의 필드내용을 가져올때

메서드

 Append() : Parameter객체추가 

 Delete() : Paraneter객체 제거 

 Refresh() : 콜렉션갱신 

속성

 ActiveConnectiob : Command객체의 Connection객체 

 CommandTimeOut : 명령을 내린 후 지연시간(초단위)

 CommandText : SQL실행문, 저장프로시저

 CommandType : CommandText의 명령형태 

 Prepared : 실행전 SQL문을 미리실행할것인지를 지정

메서드

 Execute() : SQL실행과 저장프로시저실행 

 CreateParameter() : parameter객체에서 새 parameter객체 생성

Recordset
       객체

콜렉션

 Fields 객체

                          속성

 ActualSize : 필드에 저장된 실제데이터의 길이  

 DefinedSize : 원래 필드의 길이

 Attributes : 필드에 저장된 실제데이터 타입

 Type : 원래 필드의 데이터 타입

 NumericScale : 몇번째에 소수자리가 위치하는가

 OriginaValue : 갱신전 필드가 가졌던 데이터 값 

 Precision : 필드에 저장된 숫자의 개수

 Name : 필드이름

 UnderlyingValue : DB에 저장된 필드의 현재 데이터

 Value : 아직 저장하지않은 채 할당된 필드의 데이터 값 

 Count : 레코드를 구성하는 필드개수

                         메서드

 Item() : 특정필드의 데이터값표시
  
예] Recordset.Fields.Item("name")
   
->현재레코드의 name필드값 표시 & name필드가 첫번째 필드라면 다음과 같이 표현가능함
        
Recordset.Fields.Item(0)
그러나 실제 사용은 Fileds를 생략하고 쓰임니다.
 

 Properties : 아래사항들

속성

 ActiveConnection : Recordset객체의 Connection객체 

 Absolutepage : 현재 레코드가있는 곳의 절대페이지번호

 Absoluteposition : 레코드의 순서위치값 가짐
     
-1 : 현재레코드없음(adPosUnknown)
     
-2 : 가장처음 레코드의 앞(adPosBOF)
      -3 : 가장마지막 레코드의 뒤(adPosEOF) 

 Pagesize : 1개페이지의 한계 레코드수 지정

 PageCount : Recordset의 페이지수

 RecordCount : Recordset의 레코드 개수

 BOF/EOF : 레코드의 첫번째/마지막 위치

 CursorType : 커서타입

 LockType : Lock타입

메서드

 Open() : Recordset의 커서Open

 Close() : Recordset의 객체 닫기

 Support() :  메서드가 사용할수 있는지 체크 
          예] 객체참조변수.Support(AddNew)
             ->AddNew메서드를 사용할 수 있으면 True값 가진다

 AddNew() : 새 레코드생성

 Delete() : 레코드 수정

 Update() : 레코드갱신

 Move() : 상대 레코드 이동(커서타입을 확인하세요)
   예] Move 3   : 현재레코드에서 3칸더 이동 

         Move -3  : 현재레코드에서 -3칸전 이동 

 MoveFirst() : 처음으로 레코드 이동

 MoveLast() : 마지막으로 레코드 이동

 MoveNext() : 다음으로 레코드 이동

 MovePrevious() : 이전으로 레코드 이동

하위객체

 Field

 Property

1. Connection 객체

 Connection객체의 주된 역할은 일단 접근하고자 하는 DataBase와의 연결설정입니다.먼저 Server객체의 CreateObject메서드를 이용하여 Connection객체의 인스탄스를 생성합니다.

[인스탄스생성]   

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

    a. 참고로 DBconn은 변수입니다. Connection 객체를 참조받기 위해서입니다.
    b. ADODB.Connection 은 Connection객체생성을 위한 ProgID입니다.


[DataBase지정]

   DBconn.Open (DSN, 사용자ID, 암호)

    a. DSN은 제어판의 ODBC에서 설정한 DB의 가상이름입니다.  
    b. 사용자ID와 암호는 DB에 접근가능한 사용자를 구별하기 위해서입니다.
       우리는  Windows환경에서 Access를 사용하므로 이부분은  생략하도록 합니다.    

[예제1 : 레코드 추가] test.asp ----------

<html>
<body>

<%

  Set DBconn = Server.CreateObject("ADODB.Connection")
  DBconn.OPen "dowoo3DB"

  tempsql = "
Insert into members values('강병철','31','765-8769','농구','bhkan@dong.co.kr')"

    
  DBconn.execute  tempsql      '레코드추가실행
     
  DBconn.close                             '데이타소스연결을 종료
  Set DBconn = nothing            '메모리에할당된 객체참조변수'DBconn'을 Clear  
  
%>

 !레코드를 추가하였습니다!

</body>
</html>

 --- Access파일을 열어서 추가되었는지 확인하세요. ---

[예제2 : 레코드 삭제] test.asp ----------

<html>
<body>

<%

  Set DBconn = Server.CreateObject("ADODB.Connection")
  DBconn.Open "dowoo3DB"
 
  DBconn.execute "Delete * From members"            '전체데이터삭제

  DBconn.close
  Set DBconn = nothing

%>

!레코드를 삭제하였습니다.

</body>
</html>

[참고 : Execute메서드를 이용한 추가기능]

 위 예제에서 쓰인 Execute메서드의 사용만으로로도 일반적인 작업의 처리는 가능하지만 좀더 기능을 효율적으로 이용하자면

DBconn.execute  실행문, 영향받는레코드수, 옵션

 a. 실행문은 위예제에서 사용한 SQL문장이나 저장프로시저입니다.
 b. 영향받는레코드수는 임의변수를 대체하여사용합니다.
 c. 옵션 : 상수값의 적용을 받습니다.
     1 : 실행문이 SQL과 같은 텍스트 명령임을 지정  
     2 : 실행문이 테이블이름임을 지정
     4 : 실행문이 DB소스내의 프로시저임을 지정
 d. 옵션을 지정하여 ADO객체가 DB소스에게 지금실행할 명령이 어떤 명령형인지를 물어보는 번거로움을 줄여줍니다.

[예제3 : 레코드삭제] test.asp ----------

<html>
<body>
<%
Set DBconn = Server.CreateObject("ADODB.Connection")
DBconn.Open "dowoo3DB"

DBconn.BeginTrans               '트랜잭션을 시작

DBconn.Execute "Delete * from members where age='31'", selectRecord,
1

If DBconn.Errors.Count=0 then            
'오류가없으면   
     DBconn.CommitTrans                    
'작업을 처리하고 저장

     Response.Write "삭제된 레코드수는" & selectRecord & "개 입니다"
else
     DBconn.RollBackTrans            '
작업을 취소하고 처음상태로 되돌림
     Response.Write "작업이 취소되었습니다."
end if

DBconn.Close
Set DBconn = nothing

%>
</body>
</html>

 ----- 실행 -----
 삭제된 레코드수는 2개 입니다. 

[중요 : 트랜잭션]

 위의 예제에서 트랜잭션의 메서드와 사용법이 소개 되었습니다. 트랜잭션은 작업을 처리하는 도중 어떤 에러가 발생하였을때 대처하기 위한것으로 DB의 수정작업을 즉시 처리하지 않고 전체 작업이 제대로 실행되었을때에만 작업을 저장하고 종료하는 기능입니다.CommiTrans와 RollbackTrans메서드의 사용법을 기억해 주시길... 


[참고 : Connection객체의 효율적인사용]

 예를들어 게시판이라는 웹응용프로그램을 만들어 DB관리를 하려고 한다면 게시판관리,읽기,쓰기부분으로 나눌 수 있습니다. 각각의 모드에서 DB를 연결하려면 Connection객체를 필요할때마다 여러번 사용해야 합니다. 그런데 이와같은 하나의 웹프로그램내에서 한번의 인스턴스생성(Connection객체)만으로도 각각의 모드에서 별도 Connection객체의 인스턴스생성없이도 DB연결을 유지할 수 있습니다. Application객체나 Session객체의 변수를 객체참조변수로 이용하는 것입니다.
  

 Sub Application_Onstart()
  
Set Application("DBconn") = Server.CreateObject("ADODB.Connection")
 End Sub 

 

 Sub Session_Onstart()
  
Set Session("DBconn") = Server.CreateObject("ADODB.Connection")
 End Sub

위 내용을 global.asa파일에 삽입시킵니다.global.asa파일에 대한 예제는 Counter작성예제에 있습니다.


2. Recordset 객체


ADO객체중에서도 가장 유용하게 사용되는 부분이겠지요. Recordset객체는 자료검색과 출력을 주 기능으로 하여 일반사용자들이 데이터를 읽고 구별하기 쉽게 SQL문에 의해 처리된 결과 값을 페이지에 보여줍니다.

[인스탄스생성]

  Set DBreco = Server.CreateObject("ADODB.Recordset")

a. DBreco는 레코드셋 객체참조변수입니다.
b. ADODB.Recordset은 레코드셋객체의 인스탄스생성위한 ProgID입니다.

[레코드셋열기]

  DBreco.Open "테이블이름", DSN [,커서타입,Lock타입,옵션]

a. 테이블이름대신 SQL문이나 저장프로시저를 사용해도 됩니다.
b. 연결문자열에의한 DB연결시에는 DSN대신 Connection객체를 씁니다.
c. 커서타입(ADO상수)
   0 <adOpenForwardOnly>: 레코드를 앞으로 이동시키면서 순차적으로 한번만 읽음
   1 <adOpenKeyset> : 레코드를 자유로이이동-레코드갱신-다른사용자가추가한내용열람불가
   2 <adOpenDynamic> : 레코드를 자유로이이동-레코드갱신-다른사용자가 작업한 
                                   모든내용 열람가능
   3 <adOpenStatic> : 레코드를 자유로이이동-레코드갱신불가-단지 데이타를 
                                   가져오는데 유용
d. Lock타입
   adLockReadOnly : 레코드는 읽을수만 있읍니다.
   adLockPessimistic : 각 레코드는 한번밖에 갱신안됩니다. 
   adLockOptimistic : 각 레코드는 한번이상 갱신가능하나 Update메서드를 실행하면 갱신안됩니다.
   adLockBatchOptimistic : 갱신모드로 들어가면 작업가능 

e. 옵션
   adCmdText : a가 SQL문을 실행함을 지정
   adCmdStoredProc : a가 저장프로시저를 사용함을 지정
   adCmdTable : a가 테이블을 가져오는것임을 지정 


[주의] 위에 설명한 커서타입에 ADO상수가 사용되는데 이러한 상수들을 사용하려면 웹페이지 작성시 adovbs.inc파일을 삽입시켜야 합니다. 사용방법은 다음과 같습니다.

<!-- #include virtual="경로/Adovbs.inc" --> 

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3285 세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인 13 김영철 01.13 16910
3284 [html] Form - 라디오버튼에서 value값 넘기기 99 단국강토 02.05 14689
3283 제가 사용하고 있는 마케팅프로그램입니다 댓글1 3 천지인 05.23 13187
3282 네이버 관련 바이럴마케팅 프로그램 총집함(카페/블로그/지식인 등) 3 천지인 05.15 13091
3281 관공서/회사접속 차단 해제 댓글8 3 초이스 05.13 12772
3280 엑셀 파일 합치기 매크로 댓글17 2 coruscate 09.14 11104
3279 파일1입니다 url helper 댓글1 2 비비드바비 04.29 10855
3278 파일2입니다 2 비비드바비 04.29 10474
열람중 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 9483
3276 Aqua data studio 한글 깨짐 설정 13 김영철 01.29 9019
3275 history.back() 시 폼데이터 유지하기 13 김영철 01.15 7583
3274 [ ASP ] url 정보의 파라메터 및 쿼리스트링 자유롭게 조정하는 함수 M 최고의하루 12.19 7465
3273 플래시에서 책장 넘기는 효과 내는 학습 자료 M 최고의하루 12.26 7418
3272 MBTI 테스트지 + 테스트파일 + 결과 댓글35 2 비비드바비 04.29 7230
3271 XML을 해야 하는 이유 13 김영철 01.29 6995
3270 gva.bgdb 인증크랙 댓글4 M 최고의하루 12.18 6791
3269 테이블 넓이 고정 태그:자동 줄 바꿈(break-all, nowrap, fixed) 99 단국강토 02.05 6586
3268 PHP 답변형 게시판 / 자료실 /PHP강좌 13 김영철 01.13 6168
3267 PDF-Pro 4 free 2 춘몽 11.22 6127
3266 award bios 어워드 바이오스 설정법 M 최고의하루 12.18 5896
3265 퍼지는 빛 만들기 | 포 토 샵 [중급] 10 액션쟁이 01.05 5763
3264 ntdll.dll 오류 해결방법 M 최고의하루 01.12 5728
3263 Edit Plus html 내보내기 예제 M 최고의하루 12.20 5726
3262 [ MySQL ] MySQL 5 한글 UTF8 한글 깨짐 분석 (Windows 용) M 최고의하루 12.04 5726
3261 ASP의 EXECUTE, EVAL 사용하기 M 최고의하루 12.23 5682
3260 log 분석 13 김영철 01.14 5635
3259 메일 수신 확인 체크 소스입니다 13 김영철 01.13 5624
3258 화면캡쳐하는 방법, 동영상 이나오는 화면 캡쳐시 안보이는 부분 나오게 하는 방법 M 최고의하루 12.26 5589
3257 The Oracle + PHP Cookbook :: Oracle/PHP 환경의 LOB 처리 13 김영철 01.14 5587
3256 엑셀 자동달력 서식 댓글5 M 최고의하루 12.18 5540
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취