Образец UpdatePV: реализация обновляемого поставщика OLE DB
Обновлен: Ноябрь 2007
UpdatePV является образцом шаблонов поставщика OLE DB, который демонстрирует реализацию обновляемого (доступного для чтения и записи) поставщика. В частности, он показывает, как выполнять немедленные и отложенные операции вставки, обновления и удаления. В UpdatePV также показано, как использовать наборы строк схемы (которые упрощают для некоторых мастеров взаимодействие с поставщиком). Кроме того, в образце UpdatePV, как и в MyProv, демонстрируется класс IRowsetLocateImpl.
Примеры дополнительных способов загрузки и сохранения данных с помощью поставщика см. в образце AdvancedPV.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Чтобы продемонстрировать функции образца, постройте образец, создайте проект-потребитель с методом доступа для поставщика и создайте консольное приложение для доступа к данным и вывода данных.
Построение и запуск этого образца
Откройте файл решения UpdatePV.sln.
В меню Построение выберите команду Построить решение.
Создайте проект-потребитель с помощью мастера проектов ATL (создайте проект в виде DLL-файла с атрибутами).
Добавьте потребитель OLE DB в проект-потребитель (выберите в окне Добавление класса пункт Потребитель ATL OLE DB).
В мастере потребителя ATL OLE DB нажмите кнопку Источник данных и в окне Свойства связи с данными выберите пункт Поставщик UpProv OLE DB. (Поставщик UpProv должен регистрироваться автоматически во время построения UpdatePV, но если он отсутствует в этом списке, запустите программу regsvr32.exe для файла UpdatePV.dll.)
Нажмите кнопку Next, чтобы перейти на вкладку Подключение, а затем в разделе Введите исходный каталог для использования убедитесь, что правильно указан путь к файлу MyData.txt.
Нажмите кнопку ОК. Откроется окно Выбор объекта базы данных. Откройте раздел Таблицы, где содержится только один элемент (путь к файлу MyData.txt). Выберите его и нажмите кнопку ОК. Управление вновь получит мастер потребителя ATL OLE DB.
В мастере потребителя ATL OLE DB выберите пункт Таблица, задайте для класса более короткое имя (если это необходимо), например CMyCons, и нажмите кнопку Готово.
Закройте появившееся диалоговое окно с предупреждением безопасности, нажав кнопку ОК.
Удалите из файла CMyCons.h следующую строку:
#error Security Issue: The connection string may contain a password
Эта строка вызывает ошибку компиляции и вставляется, чтобы предупредить (в реальных сценариях) о необходимости защиты конфиденциальных данных.
Постройте проект-потребитель, щелкнув правой кнопкой мыши узел проекта в окне Обозреватель решений и выбрав команду Построить.
Создайте новое консольное приложение. Включите заголовок потребителя в 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; }
Поместите точку останова в функцию 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