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

[펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1
작성자 : M 최고의하루
등록날짜 : 2008.12.23 09:32
3,978
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

번호 제목 글쓴이 날짜 조회
3015 APM에서 utf-8 구현 방법 13 김영철 01.14 2587
3014 utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8 13 김영철 01.14 2003
3013 PHP로 작동하는 RSS 읽는 함수 13 김영철 01.14 2078
3012 EditPlus V2.30 되면서 눈에띄는 달라진점 7가지 13 김영철 01.14 2350
3011 오라클 캐릭터 셋 변경 M 최고의하루 01.12 3460
3010 체크박스 배열을 edit 수정페이지로 불러오기 M 최고의하루 01.12 3800
3009 config 배열. 99 단국강토 01.08 2517
3008 Rewrite 99 단국강토 01.08 3111
3007 특정폴더에서 파일을 이미지파일을 들고와서 선택시..이미지 변환 99 단국강토 01.07 3061
3006 book_shop 99 단국강토 01.07 2945
3005 Sub와 Function 차이점 99 단국강토 01.06 1886
3004 PUTTY Telnet , SSH 접속 프로그램 99 단국강토 01.06 3754
3003 VBScript 온라인 도움말 Ver 5.5 99 단국강토 01.05 3004
3002 스마택 Ver 0.2 ( 소스 자동 정렬 프로그램 ) 99 단국강토 01.05 2204
3001 # 제목을 입력하는 곳 (넓은 사이즈) M 최고의하루 01.03 2166
3000 Editplus v3.0 (문서 편집기) M 최고의하루 01.03 3074
2999 [ JSP ] 브라우저 인코딩이 자동으로 한글이 안되는 경우 해결법 99 단국강토 01.02 2860
2998 [ JS ] 버튼을 이용한 이미지 넘기기 ( 이미지 리스트 ) 99 단국강토 01.02 2878
2997 [AJAX] 자바스크립트에서 XML 파일 읽어 오기 99 단국강토 12.30 3155
2996 [AJAX] DOMDocument 에서 selectSingleNode 을 이용한 XML 노드 (Node) 찾기 99 단국강토 12.30 2988
2995 [ JS , AJAX ] DOM 크로스브라우징 : 원하는 노드 찾기 [ createDocument , DOMDocument ] M 최고의하루 12.26 2488
2994 외부링크 금지하는 방법 M 최고의하루 12.26 2139
2993 오늘 하루 창 열지 않기 M 최고의하루 12.24 3303
2992 DLL화일 레지스트리에 등록 또는 삭제 하기 M 최고의하루 12.24 3307
2991 팝업창 닫고 프레임이 있는 부모창에서 원하는 페이지로 이동하기 M 최고의하루 12.23 2913
2990 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-2 M 최고의하루 12.23 2103
열람중 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 3979
2988 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 5324
2987 [펌] 제13강 - 방명록 만들기 II M 최고의하루 12.20 2385
2986 [펌] 제14강 - 방명록 만들기 III M 최고의하루 12.20 2497
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취