Поделиться через


Получение метаданных в схеме набора строк

Иногда необходимо получить сведения о поставщике, наборе строк, таблице, столбцах или другой информации базы данных, не открывая набор строк. Информацию о структуре базы данных называют метаданными, ее можно получить разными способами. Первым способом является использование схемы набора строк.

Шаблоны OLE DB обеспечивают набор классов для получения сведений о схеме; эти классы создают предопределенные наборы строк схемы и перечислены в разделе Классы наборов строк схемы и классы Typedef.

Примечание

Если используется OLAP, и некоторые наборы строк не поддерживаются классами наборов строк схемы (например, если имеется переменное количество столбцов), рекомендуется применять CManualAccessor или CDynamicAccessor.Можно выполнить прокрутку столбцов и использовать инструкции Сase для обработки возможных типов данных для каждого столбца.

Модель каталога или схемы

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. Этот метод возвращает результирующий набор, основанный на указанных ограничениях.

Чтобы указать ограничения, обратитесь к разделу Приложение Б. Наборы строк схемы и найдите используемый набор строк. Например, CColumns соответствует Набору строк COLUMNS; в этом разделе приводятся столбцы ограничений в наборе строк COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. При указании ограничений необходимо придерживаться данного порядка.

Например, если нужно указать ограничение по имени таблицы, обратите внимание, что TABLE_NAME является третьим столбцом ограничений, затем вызовите функцию Open и укажите необходимое имя таблицы в качестве третьего параметра ограничения, как показано в следующем примере.

Использование наборов строк схемы

  1. Прежде всего, необходимо включить файл заголовка Atldbsch.h (разумеется, для поддержки потребителя также требуется Atldbcli.h).

  2. Создайте экземпляр объекта набора строк схемы в файле заголовка потребителя или документа. Если необходимо получить сведения таблицы, объявите объект CTables, если же требуются сведения столбцов, объявите объект CColumns. В следующем примере демонстрируется способ получения столбцов из таблицы Аuthors:

    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.

Дополнительные сведения о наборе строк данных, а также классах typedef, предоставленных в шаблонах OLE DB, см. в разделе Классы наборов строк схемы и классы Typedef.

Дополнительные сведения о наборах строк схемы OLE DB, а также столбцах ограничений см. в разделе Приложение Б. Наборы строк схемы справочника программиста OLE DB.

Более сложные примеры использования классов набора строк схемы см. в образцах CatDB и DBViewer.

Дополнительные сведения о поддержке наборов строк схемы поставщиком см. в разделе Поддержка наборов строк схемы.

См. также

Основные понятия

Использование методов доступа