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


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

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

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

Примечание.

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

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

ANSI SQL определяет модель каталога или схемы для хранилищ данных. Эта модель используется OLE DB. В этой модели каталоги (базы данных) имеют схемы и схемы с таблицами.

  • Каталог A — это другое имя базы данных. Это коллекция связанных схем. Чтобы перечислить каталоги (базы данных), принадлежащие заданному источнику данных, используйте CCatalog. Так как многие базы данных имеют только один каталог, метаданные иногда называются сведениями о схеме.

  • Схема — это коллекция объектов базы данных, принадлежащих конкретному пользователю или созданных пользователем. Чтобы получить список схем, принадлежащих заданному пользователю, используйте CSchemata.

    В терминах Microsoft SQL Server и ODBC 2.x схема является владельцем (например, dbo — это типичное имя схемы). Кроме того, SQL Server хранит метаданные в наборе таблиц: одна таблица содержит список всех таблиц, а другая — список всех столбцов. В базе данных Microsoft Access нет эквивалента схеме.

  • Таблицы таблиц — это коллекции столбцов, расположенных в определенных заказах. Чтобы перечислить таблицы, определенные в данном каталоге (базе данных) и сведения об этих таблицах, используйте таблицы CTable.

Ограничения

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

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(ds);
    CColumns columnSchemaRowset;
    // TABLE_NAME is the third restriction column, so
    // specify "authors" as the third restriction parameter:
    HRESULT hr = columnSchemaRowset.Open(ss, NULL, NULL, L"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, включая столбцы ограничений, см . в приложении B: наборы строк схемы в справочнике программиста OLE DB.

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

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

См. также

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