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


Образец UpdatePV: реализация обновляемого поставщика OLE DB

Обновлен: Ноябрь 2007

UpdatePV является образцом шаблонов поставщика OLE DB, который демонстрирует реализацию обновляемого (доступного для чтения и записи) поставщика. В частности, он показывает, как выполнять немедленные и отложенные операции вставки, обновления и удаления. В UpdatePV также показано, как использовать наборы строк схемы (которые упрощают для некоторых мастеров взаимодействие с поставщиком). Кроме того, в образце UpdatePV, как и в MyProv, демонстрируется класс IRowsetLocateImpl.

Примеры дополнительных способов загрузки и сохранения данных с помощью поставщика см. в образце AdvancedPV.

w87e7c27.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

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

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

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

Построение и запуск этого образца

  1. Откройте файл решения UpdatePV.sln.

  2. В меню Построение выберите команду Построить решение.

  3. Создайте проект-потребитель с помощью мастера проектов ATL (создайте проект в виде DLL-файла с атрибутами).

  4. Добавьте потребитель OLE DB в проект-потребитель (выберите в окне Добавление класса пункт Потребитель ATL OLE DB).

  5. В мастере потребителя ATL OLE DB нажмите кнопку Источник данных и в окне Свойства связи с данными выберите пункт Поставщик UpProv OLE DB. (Поставщик UpProv должен регистрироваться автоматически во время построения UpdatePV, но если он отсутствует в этом списке, запустите программу regsvr32.exe для файла UpdatePV.dll.)

  6. Нажмите кнопку Next, чтобы перейти на вкладку Подключение, а затем в разделе Введите исходный каталог для использования убедитесь, что правильно указан путь к файлу MyData.txt.

  7. Нажмите кнопку ОК. Откроется окно Выбор объекта базы данных. Откройте раздел Таблицы, где содержится только один элемент (путь к файлу MyData.txt). Выберите его и нажмите кнопку ОК. Управление вновь получит мастер потребителя ATL OLE DB.

  8. В мастере потребителя ATL OLE DB выберите пункт Таблица, задайте для класса более короткое имя (если это необходимо), например CMyCons, и нажмите кнопку Готово.

  9. Закройте появившееся диалоговое окно с предупреждением безопасности, нажав кнопку ОК.

  10. Удалите из файла CMyCons.h следующую строку:

    #error Security Issue: The connection string may contain a password
    

    Эта строка вызывает ошибку компиляции и вставляется, чтобы предупредить (в реальных сценариях) о необходимости защиты конфиденциальных данных.

  11. Постройте проект-потребитель, щелкнув правой кнопкой мыши узел проекта в окне Обозреватель решений и выбрав команду Построить.

  12. Создайте новое консольное приложение. Включите заголовок потребителя в CPP-файл и измените код следующим образом:

    #include "stdafx.h"
    #include <atldbcli.h>
    #include "..\consumer\cmycons.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
       HRESULT hr = CoInitialize(NULL);
    
       CMyCons c;
    
       hr = c.OpenAll();
       ATLASSERT( SUCCEEDED( hr ) );
    
       hr = c.MoveFirst();
       while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
       {
          printf( "%d %s %s %s %s\n", c.m_Fixed, c.m_Command, c.m_Text, 
             c.m_Command2, c.m_Text2 );
          hr = c.MoveNext();
       }
    
       c.CloseAll();
       CoUninitialize();
       return 0;
    }
    
  13. Поместите точку останова в функцию CoUninitialize. Это позволит сохранить консоль открытой, чтобы просмотреть результаты. Запустите консольное приложение из среды разработки, нажав кнопку Пуск. Будут выведены пять столбцов (один столбец индекса и четыре столбца с текстом).

Принцип работы образца

Образец UpdatePV построен на основе функций C для файлового ввода-вывода. Этот образец представляет хранилище данных. В частности, образец принимает текстовый файл, состоящий из пары элементов данных, и преобразует его в набор строк. Образец поставляется с текстовым файлом MyData.txt, который содержит пары элементов данных. Однако его можно запустить с любым текстовым файлом (он будет выполнять синтаксический анализ любого текста в виде кортежей из двух слов).

Операции чтения в UpdatePV выполняются функцией RUpdateRowset::Execute (rowset.h). Операции записи обрабатываются функцией RUpdateRowset::FlushData (rowset.h). Эти функции вызываются шаблонами поставщика OLE DB в обычном режиме работы поставщика. Образец использует классы шаблонов поставщика OLE DB: IRowsetChangeImpl и IRowsetUpdateImpl. Класс IRowsetChangeImpl обеспечивает поддержку немедленных операций вставки, обновления и удаления. Класс IRowsetUpdateImpl обеспечивает поддержку отложенных операций вставки, обновления и удаления. Класс IRowsetUpdateImpl наследует из класса IRowsetChangeImpl. Дополнительные сведения о получении и задании данных см. в разделе Создание обновляемого поставщика документации по Visual C++ и в разделе Обновление данных в наборах строксправочника программиста OLE DB в документации по SDK для Windows.

Образец UpdatePV также поддерживает наборы строк схемы. Эти наборы строк схемы позволяют потребителям получать сведения о поставщике, не открывая набор данных и не выполняя команд. Мастеры Visual C++ используют наборы строк схемы для создания методов доступа на стороне клиента. Основными функциями являются CUpdateSessionTRSchemaRowset::Execute, CUpdateSessionColSchemaRowset::Execute и CUpdateSessionPTSchemaRowset::Execute. Все три функции возвращаются данные о таблицах, поддерживаемых поставщиков, о столбцах в таблицах и о типах данных для таблиц. Дополнительные сведения о наборах строк схемы см. в описании интерфейса IDBSchemaRowset в справочнике программиста OLE DB.

Ключевые слова

В образце показаны следующие интерфейсы:

IRowsetChange, IRowsetUpdateImpl

В образце показаны следующие свойства:

DBPROP_IRowsetChange, DBPROP_IRowsetUpdate

См. также

Другие ресурсы

Образцы ATL