다음을 통해 공유


사용자 레코드

참고 항목

Visual Studio 2019 이상에서는 ATL OLE DB 공급자 마법사를 사용할 수 없습니다.

사용자 레코드는 행 집합의 열 데이터를 나타내는 코드 및 데이터 구조를 제공합니다. 컴파일 시간이나 런타임에 사용자 레코드를 만들 수 있습니다. ATL OLE DB 공급자 마법사를 사용하여 공급자를 만드는 경우, 마법사에서 다음과 같은 기본 사용자 레코드를 만듭니다(공급자 이름(짧은 이름)으로 MyProvider를 지정했다고 가정).

class CWindowsFile:
   public WIN32_FIND_DATA
{
public:
  
BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
   PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
   PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
   PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
   PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
   PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
  
};

OLE DB 공급자 템플릿은 클라이언트와의 상호 작용에 대한 모든 OLE DB 세부 정보를 처리합니다. 응답에 필요한 열 데이터를 얻기 위해 공급자는 GetColumnInfo 함수를 호출합니다. 이 함수를 사용자 레코드에 배치해야 합니다. 예를 들어 .h 파일에서 다음과 같이 선언하면 사용자 레코드에서 GetColumnInfo를 명시적으로 재정의할 수 있습니다.

template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)

이 코드는 다음과 같습니다.

static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)

그런 다음, 사용자 레코드의 .cpp 파일에서 GetColumnInfo를 구현합니다.

PROVIDER_COLUMN_MAP 매크로는 GetColumnInfo 함수를 만드는 데 도움이 됩니다.

  • BEGIN_PROVIDER_COLUMN_MAP은 함수 프로토타입 및 ATLCOLUMNINFO 구조체의 정적 배열을 정의합니다.

  • PROVIDER_COLUMN_ENTRY는 단일 ATLCOLUMNINFO를 정의하고 초기화합니다.

  • END_PROVIDER_COLUMN_MAP은 배열과 함수를 닫습니다. 또한 pcCols 매개 변수에 배열 요소 수를 배치합니다.

런타임 GetColumnInfo 에 사용자 레코드가 만들어지면 매개 변수를 pThis 사용하여 행 집합 또는 명령 인스턴스에 대한 포인터를 받습니다. 이 포인터에서 열 정보를 가져올 수 있도록 명령과 행 집합이 IColumnsInfo 인터페이스를 지원해야 합니다.

사용자 레코드를 사용하는 명령과 행 집합은 CommandClassRowsetClass입니다.

사용자 레코드에서 GetColumnInfo를 재정의하는 방법의 자세한 예제는 소비자에게 반환되는 열을 동적으로 결정을 참조하세요.

참고 항목

OLE DB 공급자 템플릿 구조