UpdatePV 샘플: 업데이트할 수 있는 OLE DB 공급자 구현
업데이트: 2007년 11월
UpdatePV 샘플은 업데이트할 수 있는(읽기/쓰기) 공급자를 구현하는 방법을 보여 주는 OLE DB 공급자 템플릿 샘플입니다. 이 샘플에서는 특히 즉시 및 지연 삽입/업데이트/삭제를 수행하는 방법을 보여 줍니다. UpdatePV에서는 스키마 행 집합을 사용함으로써 일부 마법사가 공급자와 쉽게 상호 작용하도록 하는 방법도 보여 줍니다. UpdatePV에서는 MyProv와 마찬가지로 IRowsetLocateImpl 클래스도 보여 줍니다.
공급자를 사용하여 데이터를 로드하고 저장하는 방법에 대한 추가 기술을 보려면 AdvancedPV 샘플을 참조하십시오.
보안 정보: |
---|
이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다. |
샘플 및 이를 설치하기 위한 지침을 가져오려면
Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.
자세한 내용은 샘플 파일 찾기를 참조하십시오.
최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.
컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.
샘플 빌드 및 실행
이 샘플에서 보여 주는 기능을 사용해 보려면 샘플을 빌드하고 공급자에 대한 접근자가 있는 소비자 프로젝트를 만든 다음 콘솔 응용 프로그램을 만들어 데이터에 액세스하고 출력합니다.
이 샘플을 빌드하고 실행하려면
솔루션 파일인 UpdatePV.sln을 엽니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
ATL 프로젝트 마법사를 사용하여 소비자 프로젝트를 만듭니다. 이 마법사에서는 소비자 프로젝트를 특성을 사용하는 .dll 파일로 만듭니다.
클래스 추가에서 ATL OLE DB 소비자를 선택하여 소비자 프로젝트에 OLE DB 소비자를 추가합니다.
ATL OLE DB 소비자 마법사에서 데이터 소스 단추를 클릭하고 데이터 연결 속성에서 UpProv OLE DB Provider를 선택합니다. UpProv 공급자는 UpdatePV를 빌드할 때 자동으로 등록되어야 하지만 목록에 이 공급자가 없는 경우에는 UpdatePV.dll에 대해 regsvr32.exe를 실행합니다.
Next를 클릭하여 연결 탭으로 이동한 다음 **사용할 초기 카탈로그를 입력하십시오.**에서 MyData.txt의 경로 이름이 올바른지 확인합니다.
확인을 클릭합니다. 데이터베이스 개체 선택 대화 상자가 나타나면 테이블을 엽니다. 여기에는 하나의 항목, 즉 MyData.txt의 경로 이름만 있습니다. 이 항목을 선택하고 확인을 클릭합니다. ATL OLE DB 소비자 마법사로 돌아갑니다.
ATL OLE DB 소비자 마법사에서 테이블을 선택하고 필요하면 클래스 이름을 CMyCons 등의 더 짧은 이름으로 바꾼 다음 마침을 클릭합니다.
보안 경고 대화 상자가 나타나면 확인을 눌러 닫습니다.
CMyCons.h에서 다음 줄을 제거합니다.
#error Security Issue: The connection string may contain a password
이 줄이 있으면 컴파일을 수행할 수 없지만, 실제 시나리오에서 중요한 정보를 보호해야 함을 알리기 위해 삽입되어 있습니다.
솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 빌드를 클릭하여 소비자 프로젝트를 빌드합니다.
새 콘솔 응용 프로그램을 만듭니다. .cpp 파일에서 소비자 헤더를 포함시키고 코드를 다음과 같이 수정합니다.
#include "stdafx.h" #include <atldbcli.h> #include "..\consumer\cmycons.h" int _tmain(int argc, _TCHAR* argv[]) { HRESULT hr = CoInitialize(NULL); CMyCons c; hr = c.OpenAll(); ATLASSERT( SUCCEEDED( hr ) ); hr = c.MoveFirst(); while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) { printf( "%d %s %s %s %s\n", c.m_Fixed, c.m_Command, c.m_Text, c.m_Command2, c.m_Text2 ); hr = c.MoveNext(); } c.CloseAll(); CoUninitialize(); return 0; }
CoUninitialize 함수에 중단점을 설정합니다. 이렇게 하면 콘솔이 열린 상태로 있으므로 결과를 볼 수 있습니다. 개발 환경에서 시작 단추를 클릭하여 콘솔 응용 프로그램을 실행합니다. 다섯 개의 텍스트 열이 출력되어야 합니다. 이 중 하나는 인덱스 열이고 네 개는 텍스트 열입니다.
샘플 작동 방식
UpdatePV는 C 런타임 파일 I/O 함수를 기반으로 빌드됩니다. 이는 데이터 저장소를 나타냅니다. 특히, 이 샘플에서는 한 쌍의 데이터 요소로 구성된 텍스트 파일을 사용하며 이를 행 집합으로 변환합니다. 이 샘플은 여러 쌍의 데이터 요소가 포함된 텍스트 파일인 MyData.txt와 함께 제공됩니다. 그러나 이 샘플은 모든 항목을 2단어 튜플로 구문 분석하는 역할만 수행하므로 모든 텍스트 파일에 대해 이 샘플을 실행할 수 있습니다.
UpdatePV에서는 RUpdateRowset::Execute(rowset.h)를 사용하여 읽기 작업을 수행합니다. 쓰기 작업은 RUpdateRowset::FlushData(rowset.h)를 사용하여 처리됩니다. 이 함수들은 OLE DB 공급자 템플릿에서 일반 공급자 작업의 일부로 호출됩니다. 이 샘플에서는 OLE DB 공급자 템플릿 IRowsetChangeImpl 및 IRowsetUpdateImpl 클래스를 사용합니다. IRowsetChangeImpl 클래스는 즉시 삽입/업데이트/삭제를 지원하고, IRowsetUpdateImpl 클래스는 지연 삽입/업데이트/삭제를 지원합니다. IRowsetUpdateImpl 클래스는 IRowsetChangeImpl에서 상속합니다. 데이터 가져오기 및 설정에 대한 자세한 내용은 Visual C++ 설명서의 업데이트 가능 공급자 만들기와 Windows SDK 설명서의 OLE DB Programmer's Reference에 있는 Updating Data in Rowsets을 읽어 보십시오.
UpdatePV는 스키마 행 집합도 지원합니다. 이 스키마 행 집합을 사용하면 소비자가 행 집합을 열거나 명령을 실행하지 않고도 공급자에 대한 정보를 찾을 수 있습니다. Visual C++ 마법사에서는 스키마 행 집합을 사용하여 클라이언트측 접근자를 생성합니다. 기본 함수는 CUpdateSessionTRSchemaRowset::Execute, CUpdateSessionColSchemaRowset::Execute 및 CUpdateSessionPTSchemaRowset::Execute입니다. 세 함수 모두 공급자가 지원하는 테이블, 테이블의 열 및 테이블의 데이터 형식에 대한 정보를 반환합니다. 스키마 행 집합에 대한 자세한 내용은 OLE DB Programmer's Reference의 IDBSchemaRowset 인터페이스를 참조하십시오.
키워드
이 샘플에서는 다음의 인터페이스를 보여 줍니다.
IRowsetChange, IRowsetUpdateImpl
이 샘플에서는 다음의 속성을 보여 줍니다.
DBPROP_IRowsetChange, DBPROP_IRowsetUpdate