스키마 행 집합을 사용하여 메타데이터 구하기
업데이트: 2007년 11월
때때로 행 집합을 열지않고 공급자, 행 집합, 테이블, 열 또는 기타 데이터베이스에 대한 정보를 구해야 하는 경우가 있습니다. 데이터베이스 구조에 대한 데이터는 메타데이터라고 불리며 여러 방법을 통해 검색할 수 있습니다. 그 중 한 가지 방법이 바로 스키마 행 집합을 사용하는 것입니다.
OLE DB 템플릿은 스키마 정보를 검색하기 위해 클래스 집합을 제공합니다. 이들 클래스는 미리 정의된 스키마 행 집합을 만들며, Schema Rowset Classes and Typedef Classes에 나열됩니다.
참고: |
---|
OLAP를 사용하고 있으며 행 집합 일부가 스키마 행 집합 클래스에서 지원되지 않는 경우(예: 다양한 열을 가진 경우)에는 CManualAccessor 또는 CDynamicAccessor의 사용을 고려해야 합니다. 열 사이를 스크롤할 수 있으며 case 문을 사용하여 각 열에 대해 가능한 데이터 형식을 처리할 수 있습니다. |
카탈로그/스키마 모델
ANSI SQL은 데이터 저장소에 대한 카탈로그/스키마 모델을 정의하며, OLE DB에서는 이 모델을 사용합니다. 이 모델에서 카탈로그(데이터베이스)에는 스키마가 포함되며, 스키마에는 테이블이 포함됩니다.
카탈로그 카탈로그는 데이터베이스의 또 다른 이름입니다. 카탈로그는 관련 스키마의 컬렉션입니다. 지정된 데이터 소스에 속하는 카탈로그(데이터베이스)를 나열하려면, CCatalog를 사용하십시오. 여러 데이터베이스가 하나의 카탈로그만 갖기 때문에 메타데이터를 스키마 정보라고도 합니다.
스키마 스키마는 특정 사용자가 소유하고 있거나 만든 데이터베이스 개체의 컬렉션을 말합니다. 지정된 사용자가 소유한 스키마를 나열하려면, CSchemata를 사용하십시오.
Microsoft SQL Server 및 ODBC 2.x 용어에서 스키마는 소유자입니다. 예를 들어, dbo는 일반 스키마 이름입니다. 또한 SQL Server에서는 메타데이터를 테이블 집합에 저장합니다. 어떤 테이블에는 모든 테이블의 목록이 들어 있으며, 다른 테이블에는 모든 열의 목록이 들어 있습니다. Microsoft Access 데이터베이스에는 스키마에 해당하는 항목이 없습니다.
테이블 테이블은 특정 순서대로 배열된 열의 컬렉션을 말합니다. 지정된 카탈로그(데이터베이스)에 정의된 테이블 및 이들 테이블에 대한 정보를 나열하려면 CTables를 사용하십시오.
제한
스키마 정보를 쿼리하는 경우, 제한을 사용하여 원하는 정보의 유형을 지정할 수 있습니다. 제한은 쿼리의 필터나 한정자로 간주됩니다. 예를 들어, 다음 쿼리에서는
SELECT * FROM authors where l_name = 'pivo'
l_name은 제한입니다. 이는 하나의 제한만 사용한 매우 간단한 예제이지만, 행 집합 클래스에서는 여러 제한을 사용할 수 있습니다.
schema rowset typedef classes를 사용하여 모든 OLE DB 스키마 행 집합을 캡슐화하면 스키마 행 집합을 인스턴스화하고 열어서 다른 행 집합과 마찬가지로 스키마 행 집합에 액세스할 수 있습니다. 예를 들어, typedef 클래스 CColumns는 다음과 같이 정의됩니다.
CRestrictions<CAccessor<CColumnsInfo>
CRestrictions 클래스에서는 제한을 지원합니다. 스키마 행 집합의 인스턴스를 만든 후 CRestrictions::Open을 호출하십시오. 이렇게 하면 지정한 제한에 따라 결과 집합이 반환됩니다.
제한을 지정하려면 Appendix B: Schema Rowsets!Alink("oledbSchema_Rowsets")서 사용할 행 집합을 참조하십시오. 예를 들어, CColumns는 COLUMNS 행 집합에 해당합니다. 이 항목에서는 COLUMNS 행 집합의 제한 열(TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME)을 나열합니다. 이 순서에 따라 제한을 지정해야 합니다.
예를 들어, 테이블 이름으로 제한하려고 하는 경우에는 TABLE_NAME이 세 번째 열이라는 점을 참고한 후 다음 예제에서처럼 원하는 테이블 이름을 세 번째 제한 매개 변수로 지정하여 Open을 호출하십시오.
스키마 행 집합을 사용하려면
헤더 파일 Atldbsch.h를 포함해야 합니다(소비자 지원을 위해 Atldbcli.h도 포함해야 함).
소비자 헤더 파일이나 문서 헤더 파일의 스키마 행 집합 개체를 인스턴스화합니다. 테이블 정보를 원하는 경우에는 CTables 개체를 선언하고, 열 정보를 원하는 경우에는 CColumns 개체를 선언합니다. 다음 예제는 authors 테이블에서 열을 검색하는 방법에 대해 보여 줍니다.
CDataSource ds; ds.Open(); CSession ss; ss.Open(); CColumns ColumnSchemaRowset; // TABLE_NAME is the third restriction column, so // specify "authors" as the third restriction parameter: hr = ColumnSchemaRowset.Open(ss, NULL, NULL, "authors"); hr = ColumnSchemaRowset.MoveFirst(); while (hr == S_OK) { hr = ColumnSchemaRowset.MoveNext(); }
정보를 페치하려면, 스키마 행 집합 개체의 알맞은 데이터 멤버(예: ColumnSchemaRowset.m_szColumnName)에 액세스합니다. 이는 COLUMN_NAME에 해당합니다. 각 데이터 멤버에 해당되는 OLE DB 열을 보려면 CColumns를 참조하십시오.
OLE DB 템플릿에 제공된 스키마 행 집합 typedef 클래스에 대한 내용은 스키마 행 집합 클래스 및 Typedef 클래스를 참조하십시오.
제한 열을 포함한 OLE DB 스키마 행 집합에 대한 자세한 내용은 OLE DB Programmer's Reference의 Appendix B: Schema Rowsets를 참조하십시오.
스키마 행 집합 클래스 사용 방법에 대한 더 복잡한 예제는 CatDB 및 DBViewer 샘플을 참조하십시오.
스키마 행 집합의 공급자 지원에 대한 자세한 내용은 스키마 행 집합 지원을 참조하십시오.