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


Образец AdvancedPV: демонстрация дополнительных методов создания поставщиков

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

Образец AdvancedPV очень похож на образец UpdatePV, но демонстрирует некоторые дополнительные методы.

Обычно поставщики, созданные по шаблонам OLE DB, используют для хранения данных объекты CAtlArray. Шаблоны поставщиков OLE DB вызывают предоставляемый пользователем метод Execute для заполнения массива (например, для загрузки в массив всех строк из файла данных). Другой предоставляемый пользователем метод — FlushData — используется для сохранения содержимого массива (например, для записи содержимого массива обратно в файл данных). Проблемой такого подхода является то, что в методе Execute необходимо загружать все строки в наборе строк, а в методе FlushData необходимо сохранять все строки одновременно. Если набор строк содержит большое число строк, все данные будет необходимо хранить в памяти (в объекте CAtlArray).

В образце AdvancedPV показано, как использовать специальный класс массив вместо массива CAtlArray по умолчанию, чтобы реализовать в поставщике загрузку и сохранение строк по мере необходимости. Строки будут загружаться из файла данных только когда они фактически запрашиваются (посредством специально реализованного оператора operator[]), а изменения будут записаны в файл сразу после изменения содержимого массива.

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

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

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

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

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

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

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

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

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

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

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

  3. Создайте консольное приложение Win32 с помощью мастера проектов Win32. Включите в нем поддержку ATL.

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

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

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

  7. В окне Выбор объекта базы данных откройте раздел Таблицы, где содержится только один элемент (путь к файлу DataFile.dat). Выберите его и нажмите кнопку ОК. После возвращения к мастеру потребителя ATL OLE DB выберите пункт Таблица, задайте для класса более короткое имя (если это необходимо), например CMyCons, и нажмите кнопку Готово. Постройте проект потребителя.

  8. Добавьте следующие строки в главный код проекта:

    #include "MyCons.h" 
     
    int main( int argc, char* argv[] )
    {
       // Add this code
       HRESULT hr = CoInitialize(NULL);   CMyCons rs;   hr = rs.OpenAll();   ATLASSERT( SUCCEEDED(hr));   hr = rs.MoveFirst();   while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )   {      printf( "%d %s %s %s %s\n", rs.m_Fixed, rs.m_Command, rs.m_Text,       rs.m_Command2, rs.m_Text2 );      hr = rs.MoveNext();   }   rs.CloseAll();   CoUninitialize();   return 0;
    }
    
  9. Поместите точку останова в функцию CoUninitialize. Это позволит сохранить консоль открытой, чтобы просмотреть результаты. Запустите приложение, нажав кнопку Запуск (или выберите команду Запуск без отладки в меню Отладка). Будут выведены пять столбцов (один столбец индекса и четыре столбца с текстом).

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

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

IRowsetLocateImpl, IRowsetScroll, IRowsetScrollImpl, IRowsetUpdateImpl, IConnectionPointContainerImpl, IRowsetNotifyCP, IDBCreateSessionImpl, IDBInitializeImpl, IDBPropertiesImpl, IPersistImpl, IInternalConnectionImpl, IGetDataSourceImpl, IOpenRowsetImpl, ISessionPropertiesImpl, IObjectWithSiteSessionImpl, IDBSchemaRowsetImpl, IDBCreateCommandImpl, IAccessorImpl, ICommandTextImpl, ICommandPropertiesImpl, IObjectWithSiteImpl, IConvertTypeImpl, IColumnsInfoImpl, IInternalCommandConnectionImpl

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

CSchemaRowsetImpl, CComObjectRootEx, CComObjectRootEx, CRowsetImpl, CFileArray, CSimpleRow

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

COM_INTERFACE_ENTRY, PROPERTY_INFO_ENTRY

См. также

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

Образцы ATL