다음을 통해 공유


CDynamicAccessor 클래스

데이터베이스 스키마(데이터베이스의 내부 구조)에 대해 모를 때 데이터 소스에 액세스할 수 있습니다.

구문

class CDynamicAccessor : public CAccessorBase

요구 사항

헤더: atldbcli.h

멤버

메서드

속성 설명
AddBindEntry 기본 접근자를 재정의할 때 출력 열에 바인딩 항목을 추가합니다.
CDynamicAccessor 개체를 인스턴스화하고 초기화합니다 CDynamicAccessor .
닫기 모든 열을 바인딩 해제하고, 할당된 메모리를 해제하고, 클래스에서 IAccessor 인터페이스 포인터를 해제합니다.
GetBlobHandling 현재 행의 BLOB 처리 값을 검색합니다.
GetBlobSizeLimit 최대 BLOB 크기(바이트)를 검색합니다.
GetBookmark 현재 행의 책갈피를 검색합니다.
GetColumnCount 행 집합의 열 수를 검색합니다.
GetColumnFlags 열 특성을 검색합니다.
GetColumnInfo 열 메타데이터를 검색합니다.
GetColumnName 지정된 열의 이름을 검색합니다.
GetColumnType 지정된 열의 데이터 형식을 검색합니다.
GetLength 열의 최대 길이(바이트)를 검색합니다.
GetOrdinal 열 이름이 지정된 열 인덱스를 검색합니다.
GetStatus 지정된 열의 상태를 검색합니다.
GetValue 버퍼에서 데이터를 검색합니다.
SetBlobHandling 현재 행의 BLOB 처리 값을 설정합니다.
SetBlobSizeLimit 최대 BLOB 크기(바이트)를 설정합니다.
SetLength 열의 길이를 바이트 단위로 설정합니다.
SetStatus 지정된 열의 상태를 설정합니다.
SetValue 버퍼에 데이터를 저장합니다.

설명

메서드를 사용하여 CDynamicAccessor 열 이름, 열 개수, 데이터 형식 등의 열 정보를 가져옵니다. 그런 다음 이 열 정보를 사용하여 런타임에 동적으로 접근자를 만듭니다.

열 정보는 이 클래스에서 만들고 관리하는 버퍼에 저장됩니다. GetValue를 사용하여 버퍼에서 데이터를 가져옵니다.

동적 접근자 클래스 사용에 대한 토론 및 예제는 동적 접근자 사용을 참조 하세요.

CDynamicAccessor::AddBindEntry

출력 열에 바인딩 항목을 추가합니다.

구문

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

매개 변수

정보
[in] DBCOLUMNINFO 열 정보를 포함하는 구조체입니다. OLE DB 프로그래머 참조의 IColumnsInfo::GetColumnInfo에서 "DBCOLUMNINFO 구조"를 참조하세요.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

만든 CDynamicAccessor 기본 접근자를 재정의할 때 이 메서드를 사용합니다(데이터를 가져오는 방법 참조).

CDynamicAccessor::CDynamicAccessor

개체를 인스턴스화하고 초기화합니다 CDynamicAccessor .

구문

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

매개 변수

eBlobHandling
BLOB(Binary Large Object) 데이터를 처리하는 방법을 지정합니다. 기본값은 DBBLOBHANDLING_DEFAULT. DBBLOBHANDLINGENUM 값에 대한 설명은 SetBlobHandling을 참조하세요.

nBlobSize
최대 BLOB 크기(바이트)입니다. 이 값에 대한 열 데이터는 BLOB으로 처리됩니다. 기본값은 8,000입니다. 자세한 내용은 SetBlobSizeLimit를 참조하세요.

설명

생성자를 사용하여 개체를 초기화하는 CDynamicAccessor 경우 BLOB을 바인딩하는 방법을 지정할 수 있습니다. BLOB에는 그래픽, 사운드 또는 컴파일된 코드와 같은 이진 데이터가 포함될 수 있습니다. 기본 동작은 8,000바이트를 초과하는 열을 BLOB으로 처리하고 개체에 바인딩하는 것입니다 ISequentialStream . 그러나 BLOB 크기로 다른 값을 지정할 수 있습니다.

BLOB 데이터로 한정되는 열 데이터를 처리하는 방법을 CDynamicAccessor 지정할 수도 있습니다. 기본 방식으로 BLOB 데이터를 처리하거나, BLOB 데이터를 건너뛰거나(바인딩하지 않음) BLOB 데이터를 공급자 할당 메모리에 바인딩할 수 있습니다.

CDynamicAccessor::Close

모든 열을 바인딩 해제하고, 할당된 메모리를 해제하고, 클래스에서 IAccessor 인터페이스 포인터를 해제합니다.

구문

void Close() throw();

CDynamicAccessor::GetBlobHandling

현재 행의 BLOB 처리 값을 검색합니다.

구문

const DBBLOBHANDLINGENUM GetBlobHandling() const;

설명

SetBlobHandling에서 설정한 대로 BLOB 처리 값 eBlobHandling 반환합니다.

CDynamicAccessor::GetBlobSizeLimit

최대 BLOB 크기(바이트)를 검색합니다.

구문

const DBLENGTH GetBlobSizeLimit() const;

설명

SetBlobSizeLimit에서 설정한 대로 BLOB 처리 값 nBlobSize를 반환합니다.

CDynamicAccessor::GetBookmark

현재 행의 책갈피를 검색합니다.

구문

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

매개 변수

pBookmark
[out] CBookmark 개체에 대한 포인터입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

책갈피를 검색하려면 VARIANT_TRUE 설정 DBPROP_IRowsetLocate 해야 합니다.

CDynamicAccessor::GetColumnCount

열 수를 검색합니다.

구문

DBORDINAL GetColumnCount() const throw();

Return Value

검색된 열 수입니다.

CDynamicAccessor::GetColumnFlags

열 특성을 검색합니다.

구문

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

pFlags
[out] 열 특성을 설명하는 비트 마스크에 대한 포인터입니다. OLE DB 프로그래머 참조의 IColumnsInfo::GetColumnInfo에서 "DBCOLUMNFLAGS 열거형 형식"을 참조하세요.

Return Value

열 특성이 성공적으로 검색되었는지를 반환 true 합니다. 그 외의 경우 false를 반환합니다.

설명

열 번호가 1에서 오프셋됩니다. 열 0은 특수한 경우입니다. 사용할 수 있는 경우 책갈피입니다.

CDynamicAccessor::GetColumnInfo

대부분의 소비자가 필요로 하는 열 메타데이터를 반환합니다.

구문

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

매개 변수

pRowset
[in] IRowset 인터페이스에 대한 포인터입니다.

pColumns
[out] 행 집합의 열 수를 반환할 메모리에 대한 포인터입니다. 책갈피 열이 있는 경우 이 숫자에 책갈피 열이 포함됩니다.

ppColumnInfo
[out] 구조체 배열 DBCOLUMNINFO 을 반환할 메모리에 대한 포인터입니다. OLE DB 프로그래머 참조의 IColumnsInfo::GetColumnInfo에서 "DBCOLUMNINFO 구조"를 참조하세요.

ppStringsBuffer
[out] 단일 할당 블록 내에서 모든 문자열 값(columnid 내에서 또는 pwszName에 사용되는 이름)에 대한 스토리지에 대한 포인터를 반환할 메모리에 대한 포인터입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

데이터 형식DBCOLUMNINFO에 대한 자세한 내용은 OLE DB 프로그래머 참조에서 IColumnsInfo::GetColumnInfo를 참조하세요OLECHAR.DBORDINAL

CDynamicAccessor::GetColumnName

지정된 열의 이름을 검색합니다.

구문

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

Return Value

지정된 열의 이름입니다.

CDynamicAccessor::GetColumnType

지정된 열의 데이터 형식을 검색합니다.

구문

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

pType
[out] 지정된 열의 데이터 형식에 대한 포인터입니다.

Return Value

성공 또는 false 실패에 대해 반환 true 합니다.

CDynamicAccessor::GetLength

지정된 열의 길이를 검색합니다.

구문

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

pLength
[out] 열 길이를 바이트 단위로 포함하는 정수에 대한 포인터입니다.

Return Value

지정한 열을 찾을 수 있는지를 반환 true 합니다. 그렇지 않으면 이 함수는 .를 반환합니다 false.

설명

첫 번째 재정의는 열 번호를 사용하고 두 번째 및 세 번째 재정의는 각각 ANSI 또는 유니코드 형식의 열 이름을 사용합니다.

CDynamicAccessor::GetOrdinal

열 이름이 지정된 열 번호를 검색합니다.

구문

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

매개 변수

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

pOrdinal
[out] 열 번호에 대한 포인터입니다.

Return Value

지정한 이름의 열이 있는지를 반환 true 합니다. 그렇지 않으면 이 함수는 .를 반환합니다 false.

CDynamicAccessor::GetStatus

지정된 열의 상태를 검색합니다.

구문

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

pStatus
[out] 열 상태를 포함하는 변수에 대한 포인터입니다. 자세한 내용은 OLE DB 프로그래머 참조에서 DBSTATUS를 참조하세요.

Return Value

지정한 열을 찾을 수 있는지를 반환 true 합니다. 그렇지 않으면 이 함수는 .를 반환합니다 false.

CDynamicAccessor::GetValue

지정된 열의 데이터를 검색합니다.

구문

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

매개 변수

ctype
[in] 특수 처리가 필요한 문자열 형식(CHAR*, WCHAR*)을 제외한 모든 데이터 형식을 처리하는 템플릿 매개 변수입니다. GetValue 는 여기에서 지정한 내용에 따라 적절한 데이터 형식을 사용합니다.

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

pColumnName
[in] 열 이름입니다.

pData
[out] 지정된 열의 내용에 대한 포인터입니다.

Return Value

문자열 데이터를 전달하려면 비템플레이션된 버전의 GetValue. 지정된 열 데이터가 포함된 버퍼 부분을 가리키는 이 메서드의 비템플레이션된 버전이 반환 void*됩니다. 열을 찾을 수 없으면 NULL을 반환합니다.

다른 모든 데이터 형식의 경우 템플릿이 적용된 버전의 GetValue.를 사용하는 것이 더 간단합니다. 템플릿 버전이 성공 또는 false 실패할 때 반환 true 됩니다.

설명

비템플레이션 버전을 사용하여 문자열이 포함된 열과 다른 데이터 형식을 포함하는 열에 대한 템플릿 버전이 반환됩니다.

디버그 모드에서는 pData크기가 가리키는 열의 크기와 같지 않은 경우 어설션을 가져옵니다.

CDynamicAccessor::SetBlobHandling

현재 행의 BLOB 처리 값을 설정합니다.

구문

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

매개 변수

eBlobHandling
BLOB 데이터를 처리하는 방법을 지정합니다. 사용되는 값은 다음과 같습니다.

  • DBBLOBHANDLING_DEFAULT: nBlobSize보다 큰 열 데이터를 BLOB 데이터로 SetBlobSizeLimit처리하고 또는 IStream 개체를 ISequentialStream 통해 검색합니다. 이 옵션은 nBlobSize보다 크거나 BLOB 데이터로 DBTYPE_IUNKNOWN 나열된 데이터를 포함하는 모든 열을 바인딩하려고 시도합니다.

  • DBBLOBHANDLING_NOSTREAMS: nBlobSize보다 큰 열 데이터를 BLOB 데이터로 SetBlobSizeLimit처리하고 공급자 할당 소비자 소유 메모리의 참조를 통해 검색합니다. 이 옵션은 BLOB 열이 둘 이상 있는 테이블에 유용하며 공급자는 접근자당 하나의 ISequentialStream 개체만 지원합니다.

  • DBBLOBHANDLING_SKIP: BLOB을 포함하는 것으로 한정되는 열을 건너뛰고(바인딩하지 않음) (접근자는 열 값을 바인딩하거나 검색하지 않지만 열 상태 및 길이는 검색합니다).

설명

SetBlobHandling를 호출하기 전에 Open를 호출해야 합니다.

생성자 메서드 CDynamicAccessor 는 BLOB 처리 값을 DBBLOBHANDLING_DEFAULT 설정합니다.

CDynamicAccessor::SetBlobSizeLimit

최대 BLOB 크기(바이트)를 설정합니다.

구문

void SetBlobSizeLimit(DBLENGTH nBlobSize);

매개 변수

nBlobSize
BLOB 크기 제한을 지정합니다.

설명

최대 BLOB 크기(바이트)를 설정합니다. 이 값보다 큰 열 데이터는 BLOB으로 처리됩니다. 일부 공급자는 열에 대해 매우 큰 크기(예: 2GB)를 제공합니다. 이 크기의 열에 메모리를 할당하는 대신 일반적으로 이러한 열을 BLOB으로 바인딩하려고 합니다. 이러한 방식으로 모든 메모리를 할당할 필요는 없지만 잘림을 두려워하지 않고도 모든 데이터를 읽을 수 있습니다. 그러나 네이티브 데이터 형식에서 큰 열을 강제로 CDynamicAccessor 바인딩하려는 경우가 있습니다. 이렇게 하려면 호출하기 전에 호출 SetBlobSizeLimit Open합니다.

생성자 메서드 CDynamicAccessor 는 최대 BLOB 크기를 기본값인 8,000바이트로 설정합니다.

CDynamicAccessor::SetLength

지정된 열의 길이를 설정합니다.

구문

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

nLength
[in] 열의 길이(바이트)입니다.

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

Return Value

지정한 열 길이가 성공적으로 설정되었는지를 반환 true 합니다. 그렇지 않으면 이 함수는 .를 반환합니다 false.

CDynamicAccessor::SetStatus

지정된 열의 상태를 설정합니다.

구문

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

매개 변수

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

status
[in] 열 상태입니다. 자세한 내용은 OLE DB 프로그래머 참조에서 DBSTATUS를 참조하세요.

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

Return Value

지정한 열 상태가 성공적으로 설정되었는지를 반환 true 합니다. 그렇지 않으면 이 함수는 .를 반환합니다 false.

CDynamicAccessor::SetValue

지정된 열에 데이터를 저장합니다.

구문

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

매개 변수

ctype
[in] 특수 처리가 필요한 문자열 형식(CHAR*, WCHAR*)을 제외한 모든 데이터 형식을 처리하는 템플릿 매개 변수입니다. GetValue 는 여기에서 지정한 내용에 따라 적절한 데이터 형식을 사용합니다.

pColumnName
[in] 열 이름을 포함하는 문자열에 대한 포인터입니다.

data
[in] 데이터가 포함된 메모리에 대한 포인터입니다.

nColumn
[in] 열 번호입니다. 열 번호는 1로 시작합니다. 값 0은 책갈피 열(있는 경우)을 참조합니다.

Return Value

문자열 데이터를 설정하려면 비템플레이션된 버전의 GetValue.를 사용합니다. 지정된 열 데이터가 포함된 버퍼 부분을 가리키는 이 메서드의 비템플레이션된 버전이 반환 void*됩니다. 열을 찾을 수 없으면 NULL을 반환합니다.

다른 모든 데이터 형식의 경우 템플릿이 적용된 버전의 GetValue.를 사용하는 것이 더 간단합니다. 템플릿 버전이 성공 또는 false 실패할 때 반환 true 됩니다.

참고 항목

OLE DB 소비자 템플릿
OLE DB 소비자 템플릿 참조
CAccessor 클래스
CDynamicParameterAccessor 클래스
CManualAccessor 클래스