用架构行集合获取元数据

有时需要在不打开行集合的情况下获取有关提供程序、行集合、表、列的信息或其他数据库信息。 与数据库结构有关的数据称为元数据,元数据可以通过多种不同方法检索。 一种方法是使用架构行集合。

OLE DB 模板提供了一组用于检索架构信息的类;这些类创建预定义的架构行集合,它们在架构行集类和 Typedef 类中列出。

备注

如果使用的是 OLAP 并且某些行集合不受架构行集合类支持(例如,列数可变),则应考虑使用 CManualAccessorCDynamicAccessor。可以在各列中滚动,并使用 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,将所需的表名指定为第三个限制参数,如以下示例所示。

使用架构行集合

  1. 必须包含头文件 Atldbsch.h(当然,还需要包含 Atldbcli.h 以得到使用者支持)。

  2. 在使用者或文档的头文件中实例化架构行集合对象。 如果需要表信息,则声明 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();
    }
    
  3. 若要获取信息,请访问架构行集合对象的适当数据成员,例如 ColumnSchemaRowset.m_szColumnName。 此数据成员对应于 COLUMN_NAME。 若要查看每个数据成员所对应的 OLE DB 列,请参见 CColumns

有关 OLE DB 模板中提供的架构行集合类和 typedef 类参考的信息,请参见架构行集合类和 Typedef 类

有关 OLE DB 架构行集合的更多信息(包括限制列),请参见“OLE DB Programmer's Reference”(OLE DB 程序员参考)中的附录 B:架构行集合

有关如何使用架构行集合类的更为复杂的示例,请参见 CatDBDBViewer 示例。

有关架构行集合的提供程序支持的信息,请参见支持架构行集合

请参见

概念

使用访问器