DAO Database Access Object 란 무엇 입 니까?

DAO(Database Access Object)Microsoft 사용 Jet 데이터베이스 엔진 이 데이터 베 이 스 를 방문 합 니 다.Microsoft Jet 는 Access 와 Visual 과 같 습 니 다. Basic 같은 제품 은 데이터 엔진 을 제공 합 니 다.ODBC 와 마찬가지 로 DAO 는 프로 그래 밍 에 사용 할 API 를 제공 합 니 다.MFC 도 하부 API 를 봉인 하 는 DAO 클래스 를 제공 해 프로그램 개발 을 크게 간소화 했다.MFC 의 DAO 클래스 를 이용 하면 사용 자 는 DBMS 와 독립 된 프로그램 을 만 들 수 있다.DAO 는 Visual 에서... C++4.0 버 전이 도입 되 기 시 작 했 습 니 다.일반적으로 DAO 류 는 ODBC 류 보다 광범 위 한 지원 을 제공한다.한편,ODBC 드라이버 만 있 으 면 Microsoft 를 사용 합 니 다. Jet 의 DAO 는 ODBC 데이터 원본 에 접근 할 수 있 습 니 다.한편,DAO 는 Microsoft 기반 이기 때문에 Jet 엔진 의 경우 Access 데이터베이스(즉*.MDB 파일)에 접근 할 때 좋 은 성능 을 가지 고 있 습 니 다.10.8.2 DAO 와 ODBC 의 유사 점 DAO 류 는 ODBC 류 에 비해 비슷 한 점 이 많다.이 는 주로 다음 과 같은 몇 가지 가 있다.이들 은 각종 ODBC 데이터 소스 에 대한 접근 을 지원 한다.두 사람 이 사용 하 는 데이터 엔진 은 다 르 지만 DBMS 에 독립 된 프로그램 을 만 드 는 요 구 를 만족 시 킬 수 있 습 니 다.DAO 는 ODBC 와 기능 이 비슷 한 MFC 클래스 를 제공한다.예 를 들 어 DAO 의 CDaoDatabase 클래스 는 ODBC 의 CDatabase 클래스,CDaoRecordset 는 CRecordset,CDaoRecordView 는 CRecordView,CDaoException 은 CDBException 에 대응 합 니 다.이러한 대응 하 는 클래스 기능 은 비슷 하 며,그들의 대부분 구성원 함 수 는 모두 같다.앱 위 저 드 와 클래스 위 저 드 는 DAO 와 ODBC 대상 을 사용 하 는 애플 리 케 이 션 에 유사 한 지원 을 제공한다.DAO 와 ODBC 류 는 여러 면 에서 비슷 하기 때문에 사용자 가 ODBC 를 파악 하면 DAO 사용 을 쉽게 배 울 수 있다.실제로 사용 자 는 데이터베이스 애플 리 케 이 션 을 ODBC 에서 DAO 로 쉽게 이식 할 수 있다.  Visual C++는 디스크 에 따라 DaoEnrol 이라는 예 를 제공 합 니 다.이 예 는 실제 Enroll 의 DAO 버 전 입 니 다.독자 들 은 DaoEnrol 프로젝트 를 열 어 볼 수 있 습 니 다.소스 코드 는 Enroll 과 매우 비슷 합 니 다.독 자 는 Enroll 을 구축 하 는 절차 에 따라 DaoEnrol 을 구축 할 수 있 는데 그 중에서 몇 군데 만 차이 가 있다.이것 은 주로 다음 과 같은 몇 가지 가 있다.선택 한 데이터 소스 가 다르다.AppWizard 로 DaoEnrol 을 만 들 때,ClassWizard 로 CDaoRecordset 클래스 의 파생 클래스 를 만 들 때 Database 에서 Options 대화 상자 에서 ODBC 대신 DAO 를 선택해 야 합 니 다.그리고 DAO 의 데이터 원본 은'...'단 추 를 누 른 다음 파일 대화 상자 에서 접근 할'MDB 파일'을 선택 하 는'MDB 파일'을 선택 합 니 다.기록 집의 부족 한 유형 이 다르다.ODBC 레코드 집합의 결 성 유형 은 스냅 샷(Snapshot)이 고,DAO 는 동적 집합(Dynaset)이다.매개 변수 화 방식 이 다르다.DAO 기록 집의 mstrFilter 와 mstrSort 의 인 자 는"?"가 아 닙 니 다.번,의미 있 는 매개 변수 이름 입 니 다.예 를 들 어 아래 필터 에 CourseID Param 이라는 인자 가 있 습 니 다.m_pSet->m_strFilter ="CourseID = CourseIDParam"; DoFieldExchange 함수 에는 다음 두 줄 이 있 습 니 다.pfX->SetFieldType(CDaoFieldExchange::param);DFX_Text(pFX, _T("CourseIDParam"), m_strCourseIDParam); DFX 함수 의 두 번 째 인자 도 CourseID Param 입 니 다.이상 을 처리 하 는 방식 이 다르다.예 를 들 어 기록 을 삭제 할 때 이상 에 대한 처 리 는 다음 과 같다

try 



m_pSet->Delete(); 



catch(CDaoException* e) 



AfxMessageBox(e-> 

m_pErrorInfo->m_strDescription); 

e->Delete(); 


상기 차 이 를 제외 하고 AppWizard 와 ClassWizard 도 약간의 차이 점 을 숨 겼 다.예 를 들 어 DAO 기록 집 은 DFX 데이터 교환 체제(DAO)를 사용 하 는 것 이다. record field exchange)RFX 가 아 닌 DAO 레코드 집합의 DoFieldExchange 에서 RFX 함수 가 아 닌 DFX 함 수 를 사용 합 니 다.10.8.3 DAO 의 특색 DAO 는 ODBC 드라이버 를 통 해 ODBC 데이터 원본 에 접근 할 수 있 습 니 다.DAO 는 Microsoft 기반 입 니 다. Jet 엔진 의 경우 이 엔진 을 통 해 DAO 는 Access,FoxPro,dBASE,Paradox,Excel 과 Lotus 를 직접 방문 할 수 있 습 니 다. WK 등 데이터베이스.CDaoDatabase 클래스 는 ODBC 관리자 에 DSN 을 등록 하지 않 고 이 데이터베이스 와 직접 연결 할 수 있 습 니 다.예 를 들 어 다음 코드 는 FoxPro 데이터 베 이 스 를 여 는 데 사 용 됩 니 다:CDaoDatabase daoDb; daoDb.Open( “”,FALSE,FALSE,"FoxPro 2.5;DATABASE=c:\\zyf"); CDaoDatabase::Open 함 수 는 데이터 베 이 스 를 연결 하 는 데 사 용 됩 니 다.이 함수 의 성명 은:virtual 입 니 다. void Open( LPCTSTR lpszName, BOOL bExclusive = FALSE, BOOL  bReadOnly = FALSE, LPCTSTR lpszConnect = _T("") ); throw( CDaoException, CMemoryException ); 인자 bExclusive 가 TRUE 라면 함수 가 독점 적 으로 데이터 베 이 스 를 엽 니 다.그렇지 않 으 면 공유 방식 을 사용 합 니 다.bReadOnly 가 TRUE 라면 읽 기 전용 으로 데이터 베 이 스 를 엽 니 다.Access 데이터 베 이 스 를 열 려 면 lpszName 인자 에 MDB 파일 이름 을 지정 할 수 있 습 니 다.비 Access 데이터베이스 에 접근 하려 면 이 매개 변 수 를""로 하고 lpszConnect 에서 연결 문자열 을 설명해 야 합 니 다.연결 문자열 “데이터베이스 형식;DATABASE=경로(파일) “dBASE III; DATABASE=c:\\\MYDIR"Open 함수 도 ODBC 데이터 원본 을 열 수 있 지만 이에 상응하는 ODBC 드라이버 가 필요 하 며 ODBC 관리자 에 DSN 을 등록 해 야 합 니 다.이 때 lpszConnect 의 형식 은? “ODBC;DSN=MyDataSource” 。분명히 DAO 로 Fox Pro 와 같은 데이터 베 이 스 를 방문 할 때 ODBC 데이터 원본 으로 여 는 것 보다 직접 여 는 것 이 편리 하 다.DDL 지원 은 DAO 가 데이터베이스 프로 그래 밍 에 좋 은 지원 을 하 는 중요 한 표현 이다.DDL(Data  Definition Language)SQL 용어 에서'데이터 정의 언어'라 고 하 는데 데이터베이스 구 조 를 생 성,수정,삭제 하 는 작업 을 수행 합 니 다.ODBC 클래스 는 DML(Data)만 지원 합 니 다. Manipulation Language,데이터 조작 언어),DDL 이 지원 되 지 않 기 때문에 ODBC 클래스 로 데이터 조작 만 할 수 있 고 데이터베이스 구조 와 관련 될 수 없습니다.DDL 작업 을 수행 하려 면 ODBC 를 통 해서 만 API。한편,DAO 류 는 DML 과 DDL 에 대한 지원 을 동시에 제공 하 는데 이것 은 프로그램 이 DAO 류 를 사용 하여 데이터 베 이 스 를 편리 하 게 만 들 고 데이터 베 이 스 를 수정 하 는 구 조 를 사용 할 수 있다 는 것 을 의미한다.ODBC 에 비해 DAO 는 새로운 종 류 를 제공 하여 그 기능 을 강화 했다.이런 새로운 종 류 는 CDaoTableDef 류 가 표 의 구조 에 대한 정 의 를 제공 하 는 것 을 포함한다.CDaotableDef::Open 을 호출 하면 표 의 구조 정 의 를 얻 을 수 있 습 니 다.CDaoTableDef 호출:Create 는 새 표를 만 들 고 CDaoTableDef 를 호출 할 수 있 습 니 다.:  CreateField 는 표 에 필드 를 추가 할 수 있 습 니 다.CDaoTableDef::CreateIndex 를 사용 하면 표 에 색인 을 추가 할 수 있 습 니 다.CDaotableDef::Append 를 호출 하면 새로 만 든 시 계 를 데이터베이스 에 저장 할 수 있 습 니 다.CDaoQueryDef 클래스 는 검색 정의(Query)를 대표 합 니 다. definition)이 정 의 는 데이터베이스 에 저장 할 수 있 습 니 다.CDaoWorkspace 는 데이터 작업 영역(Workspace)을 제공 합 니 다.하나의 작업 구역 은 몇 개의 데이터 베 이 스 를 포함 할 수 있 고 작업 구역 은 소속 데이터 베 이 스 를 전체 또는 단독 적 으로 처리 할 수 있 으 며 작업 구역 도 데이터 뱅 크 의 안전성 을 책임 진다.필요 하 다 면 프로그램 은 여러 작업 영역 을 열 수 있 습 니 다.DAO 의 또 다른 중요 한 특징 은 Access 데이터베이스 에 강력 한 지원 을 제공 한 다 는 것 이다.DAO 는 Microsoft 기반 이 니까. Jet 엔진 의 경우 DAO 는 Access 데이터베이스 에 글 을 많이 써 야 합 니 다.예 를 들 어 CDaoDatabase::Create 를 호출 하면 MDB 파일 을 직접 만 들 수 있 습 니 다.코드 는 다음 과 같 습 니 다.mdb.Create(“C:\\MYDIR\\MYDB.MDB”); AppWizard 와 ClassWizard 를 이용 하여 사용 자 는 성능 이 우수한 DAO 기반 Access 데이터베이스 응용 프로그램 을 편리 하 게 개발 할 수 있다.10.8.4 ODBC 또는 DAO 는 DAO 가 ODBC 데이터 원본 에 접근 할 수 있 기 때문에 다음 몇 가지 이유 로 ODBC 를 대체 할 수 있 습 니 다.어떤 경우 에는 더 좋 은 성능 을 얻 을 수 있 습 니 다.특히 Microsoft 를 방문 할 때. Jet(.MDB)데이터베이스 에 있 을 때.ODBC 와 호 환 되 는 DAO 는 DAO 가 사용자 설명 표 와 표 간 의 관 계 를 효과적으로 검사 할 수 있 도록 허용 합 니 다.물론 DAO 의 등장 은 ODBC 가 시대 에 뒤떨어 졌 다 는 것 을 의미 하지 않 습 니 다.사용자 의 작업 이 ODBC 데이터 원본 에 엄 격 히 국한 되 어야 한다 면,특히 Client/server 구조의 응용 프로그램 을 개발 할 때 ODBC 를 사용 하 는 것 이 좋 습 니 다.

좋은 웹페이지 즐겨찾기