用架构行集合获取元数据
有时需要在不打开行集合的情况下获取有关提供程序、行集合、表、列的信息或其他数据库信息。 与数据库结构有关的数据称为元数据,元数据可以通过多种不同方法检索。 一种方法是使用架构行集合。
OLE DB 模板提供了一组用于检索架构信息的类;这些类创建预定义的架构行集合,它们在架构行集类和 Typedef 类中列出。
提示
如果使用的是 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 是一个限制。 这是仅具有一个限制的简单示例;架构行集合类支持若干个限制。
架构行集 typedef 类封装所有 OLE DB 架构行集合,从而使您可以像访问其他任何行集合一样,通过实例化并打开此行集合来访问它。 例如,typedef 类 CColumns 定义为:
CRestrictions<CAccessor<CColumnsInfo>
CRestrictions 类提供了对限制的支持。 在创建架构行集合的实例后,调用 CRestrictions::Open。 此方法基于您所指定的限制返回一个结果集。
若要指定限制,请参考附录 B:架构行集并查找您所使用的行集合。 例如,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”(OLE DB 程序员参考)中的附录 B:架构行集合。
有关如何使用架构行集合类的更为复杂的示例,请参见 CatDB 和 DBViewer 示例。
有关架构行集合的提供程序支持的信息,请参见支持架构行集合。