DAO, RDO 그리고 ADO

개발/연구 / / 2006. 9. 11. 10:35

① DAO
DAO는 앞에서와 설명한 바와 같이 마이크로소프트사 젯 엔진을 사용하여 데이터베이스와 ISAM 데이터베이스를 사용할 수 있습니다. 또, DBCDirect 작업 영역을 사용하면 ODBC를 통하여 백 엔드서버(SQL서버)를 사용할 수 있습니다. 소규모의 지역적인 클라이언트/서버 환경에서 저렴한 비용으로 데이터베이스를 구축할 수 있습니다.

② RDO
RDO는 관계형 데이터베이스인 SQL서버, 오라클, 사이베이스등을 ODBC를 통해서만 데이터 베이스를 엑세스할 수 있습니다. 사실상 ODBC는 통하여 데이터베이스를 사용한다는 것은 ODBC가 표준방식이라서 호환성은 좋지만 속도는 전반적으로 떨어 집니다.
RDO는 관계형 데이터베이스를 제어하기에 편리한 개체, 속성, 메서드를 지원하여 대규모 관계형 데이터베이스 개발하기 좋은 인터페이스입니다.
RDO에서 안타가운 점은 마이크로소프트사 젯 엔진이나 ISAM을 사용할 수 없다는 것입니다. 만약 사용하고자 한다면 DAO를 사용하기 바랍니다.

③ ADO
ADO는 DAO와 RDO의 데이터베이스 기술을 개선한 인터페이스입니다. ADO의 기능적인 사용 측면에서는 RDO와 비슷하나 Recordset개체를 사용하는 것은 DAO와 거의 유사합니다. 결국 두 모델 기술의 조합이라고 볼 수 있습니다.
ADO의 사용상의 편익은 복잡했던 개체 구조를 단순화하여 사용을 편리하게 해주었다는 것입니다. 개체구조가 단순화 되었다는 것은 개체가 속성, 메서드, 이벤트를 많이 포함한다는 것을 말해 줍니다. 그러므로 처음 DAO나 RDO 모델을 잘 모르는 사용자에게는 불편을 줄 수도 있습니다. 또한, 잘못 사용하면 계층 범위 밖에서 작성할 수도 있으므로 속성, 메서드, 이벤트의 사용방법을 충분히 이해하고 사용하기 바랍니다.
ADO는 큰 장점은 최신 기술을 사용할 수 있다는 것입니다. DHTML, 원격제어, ODBC OLE DB, 트랜젝션 서버 등을 효율적으로 이용하거나 제어할 수 있습니다. 이런 것들을 추가적으로 사용한다면 ADO를 사용하는 것이 바람직합니다.
현재(98년 10월)의 ADO는 기능의 제한성을 주고 있습니다. 실제적으로 ODBC OLE DB를 제공하여 연결되고도 ODBC 데이터 원본을 작성할 수 없습니다.

ADO는 좋은 데이터베이스 기술인 것만을 틀림없습니다. 하지만 아직 DAO나 RDO로 작업된 응용 프로그램은 바꾸기엔 부족한 부분이 많습니다. 많은 기업들이 DAO나 RDO를 이용하여 구축되어 있는데 새로운 기술인 ADO를 사용한다면 좀 더 면밀한 검토가 필요합니다. ADO와 RDO에 대한 문제점은 다음과 같습니다.

① DAO문제
현재(98년 10월) ADO는 마이크로소프트사 젯 엔진과 DDL, 그룹 등을 지원하지 못합니다. 그러므로 바꾼다는 것은 거의 불가능합니다. 하지만 단순히 DAO의 DBCDirect 작업 영역을 사용하여 클라이언트/서버 응용 프로그램을 만들었다면 몇 가지 수정으로 사용할 수 있습니다.
마이크로소프트사에서는 DAO를 ADO로 변환할 수 있도록 ADO DLL 구성요소를 제공한다고 합니다.

② RDO문제
RDO에서 지원하는 ODBC드라이버 관리자와 ODBC환경을 핸들하는 hEnv 인터페이스를 보여주는 rdoEnvironment 개체가 없습니다.

DAO, RDO, ADO중에 분명히 ADO가 전체적으로 좋은 것은 확실합니다. 그렇지만 기존 업무에 구축되어 있는 DAO나 RDO를 무조건 ADO로 바꿀 필요는 없습니다. 새로운 기술과 그에 따른 업무가 ADO의 기술이 필요로 하는 부분이 있을 때 사용하는 것이 바람직합니다. 이 책에서 DAO, RDO, ADO를 다루는 것은 업무에 따른 적절한 데이터베이스 모델을 사용하기 바라는 간절한 소망일지도 모릅니다. 우리나라(Korea)는 언제나 좋은 기술이 나왔다하면 무분별하게 구축하는 현실을 보는, 프로그래머 입장에서는 안타까운 현실이 아닐 수 없습니다.

[참 고]
소규모 업무에는 DAO를 사용하고, 일반적인 C/S 환경의 프로그램을 짠다면 ADO나 RDO를 선택하고, 인터넷/인트라넷 환경의 프로그램을 만든다면 ADO를 선택하는 것이 좋습니다.
(출처 : 'ADO 와 DAO의 차이점은 무엇인가요?' - 네이버 지식iN)


1. ADO는?

ADO는 마이크로소프트에서 나온 API로서 관계형 또는 비관계형 데이터베이스에 액세스하는 윈도우 응용프로그램을 작성할 수 있도록 해줍니다. 예를 들어, 만약 IBM의 DB2 또는 Oracle 데이터베이스에 저장되어 있는 데이터를 웹사이트의 사용자들에게 제공할 수 있는 프로그램을 작성하려면, 프로그래머는 ASP라고 불리는 HTML 파일 속에 ADO 프로그램을 집어넣으면 됩니다. 사용자가 웹사이트로부터 그 페이지를 요청했을 때, 사용자에게 보내지는 그 페이지에는 데이터베이스로부터 ADO 코드를 사용하여 얻어진 적절한 데이터가 포함될 수 있을 것입니다.

마이크로소프트의 다른 인터페이스들이 그러하듯이, ADO 역시 객체지향형 인터페이스입니다. 마이크로소프트는 IBM이나 Oracle이 제시한대로 만능 데이터베이스를 만드는 노력을 하는 것보다, 다양한 종류의 모든 데이터베이스에 대해 공통적으로 적용할 수 있는 만능 액세스 방법을 만드는 게 오히려 더 낫지 않느냐고 주장하고 있습니다. 이러한 작업을 위해 마이크로소프트와 또 다른 데이터베이스 회사들은 데이터베이스와 마이크로소프트의 저급 데이터베이스 인터페이스인 OLE DB 사이를 연결할 수 있는 브리지 프로그램을 제공합니다. OLE DB는 ADO를 사용하는 프로그래머가 실제로 사용하게 되는 기본적인 시스템 서비스입니다. ADO의 특징인 원격데이터서비스는 웹 페이지 내에서 "데이터웨어"  ActiveX 컨트롤과 능률적인 클라이언트측 캐싱을 지원합니다. ADO는 ActiveX의 일부일 뿐 아니라 마이크로소프트의 Component 지향 기반 구조인 COM의 일부이기도 합니다.

ADO는 마이크로소프트의 이전 판 데이터 인터페이스였던 RDO(Remote Data Objects)로부터 발전된 것입니다. RDO는 관계형 데이터베이스를 액세스하기 위한 마이크로소프트의 ODBC와 함께 동작하지만, IBM의 ISAM이나 VSAM과 같은 관계형 데이터베이스가 아닌 파일 시스템에는 적용되지 않습니다.

(참고 : terms의 내용 발췌)

ADO에 대해 간단하게 요약하면

- OLE DB기반으로 DAO나 ROD보다 데이터베이스 접근 절차를 줄여 적은 코드로 응용 프로그램을 작성할 수 있습니다.

- 광범위한 관계형 및 비관계형 데이터로의 접근을 지원

- Recordset, Fields, Connection, Error, Command, Property 객체를 지원

- ADO Object Model


/

/






참고 site:http://www.ddart.net/mssql/sql2000/html/mdacxml/htm/mdmscadoobjmod.htm

2. Connection 객체

- 데이터 제공자(Data Provider)에 대한 연결을 담당하는 객체

- DB Open하기

->SQL Server와 Access database에 대해서만 알아보도록 하겠습니다. 다른 DB도 비슷하기 때문에 별다른 문제가 없을 것입니다.

. SQL Server에 접속

CADODatabase m_pAdoDb;

CString strConnection = _T("");

strConnection = _T("Provider=MSDASQL;PersistSecurityInfo=False;Trusted_Connection=Yes

           Data Source=Access Sql Server;catalog=sampledb");

m_pAdoDb.SetConnectionString(strConnection);

if(m_pAdoDb.Open())

{

작업

}

. Access database에 접속

CADODatabase m_pAdoDb;

CString strConnection = _T("");

strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\dbTest.mdb");

m_pAdoDb.SetConnectionString(strConnection);

if(m_pAdoDb.Open())

{

작업

}


위에서 본 것과 같이 연결을 위해서 아래와 같은 속성을 지정해야 하는데, Connection개체의 SetConnectionString 속성에 다음 값을 지정합니다.

Provider - 연결제공자
Data Source - 서버명, IP ,DB 파일명
Catalog - 연결하고자 하는 데이터베이스명
User ID - 사용자 계정
Password - 패스워드
PersistSecurityInfo - 보안
Trusted_Connection - 신뢰할 수 있는 연결 유무

Network Address - IP Address(원격에 있는 SQL서버 연결시 사용)
Network Library - 연결에 사용되는 네트웍 라이브러리

-> Network Address와 Network Library 사용 예

strConnection = _T("Provider=SQLOLEDB.1;User ID=sa;Catalog=model;Data;
Source=211.254.xxx.xxx;Network Address=211.254.xxx.xxx,2000;Network Library=dbTest");

Network Address 위에 까지는 로컬 SQL서버에 연결하는 연결 정보이고, 그 이후부터는 원격 서버에 접속하여 연결할 때 사용하는 연결 정보입니다.

로컬에서는 네임파이프(Named Pipe)를 이용하여 연결하지만, 원격 SQL서버로의 연결은 TCP/IP로 연결을 하여야 합니다.

원격 연결 시에 반드시 Network Address(IP, Port)와 Network Library는 추가하여야 합니다.

다음으로 Connection개체에서 가장 많이 사용하는 Execute method에 대해 살펴 보도록 하겠습니다.

- SQL 쿼리 실행하기(위에 *작업 부분에 추가하시면 되겠죠.. ^^;)

Execute 함수를 이용하여 그냥 일상적으로 사용하는 쿼리문을 만들어 주시면 됩니다.

. 데이터베이스 생성

m_pAdoDb.Execute("CREATE DATABASE ‘TESTDB.MDB’");

. 테이블생성

m_pAdoDb.Execute("CREATE TABLE test(name varchar(30), sex varchar(2))");

. 레코드 추가와 삭제

  m_pAdoDb.Execute(“INSERT INTO test(name, sex) VALUES (‘서광수’,’남’)”);

. 레코드의 선택

m_pAdoDb.Execute(“SELECTE * FROM name WHERE set=’남’ ORDER BY name ASC”);

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기