Partager via


AdvancedPV, exemple : illustre des techniques de fournisseur avancées

Mise à jour : novembre 2007

L'exemple AdvancedPV ressemble beaucoup à UpdatePV à ceci près qu'il illustre des techniques avancées.

Normalement, les fournisseurs écrits à l'aide de modèles OLE DB utilisent CAtlArray pour le stockage des données. Les modèles de fournisseur OLE DB appellent une méthode Execute fournie par l'utilisateur pour remplir le tableau (notamment pour charger toutes les lignes du fichier de données dans le tableau). Une autre méthode fournie par l'utilisateur, FlushData, permet d'enregistrer le contenu du tableau (par exemple, pour récrire ce contenu dans le fichier de données). Cette approche pose le problème suivant : dans Execute, vous devez charger toutes les lignes du jeu de lignes et dans FlushData, vous devez enregistrer toutes les lignes en même temps. Si le jeu de lignes comprend un grand nombre de lignes, toutes les données doivent être stockées en mémoire (dans l'objet CAtlArray).

AdvancedPV montre comment utiliser une classe de tableau spéciale à la place de la classe par défaut CAtlArray pour permettre au fournisseur de charger et d'enregistrer les lignes nécessaires uniquement. Les lignes ne sont chargées à partir du fichier de données que si elles sont effectivement demandées (via un operator[]implémenté spécialement à cet effet) et les modifications sont réinsérées dans le fichier dès que le contenu du tableau est modifié.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont stockés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont disponibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter cet exemple

  1. Ouvrez le fichier solution AdvancedPV.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Créez une application console Win32 à l'aide de l'Assistant Projet Win32. Affectez à cette application la prise en charge ATL.

  4. Ajoutez un consommateur OLE DB au projet (dans Ajouter une classe, sélectionnez Consommateur OLE DB ATL).

  5. Dans l'Assistant Consommateur OLE DB ATL, cliquez sur le bouton Source de données puis, dans Propriétés des liaisons de données, sélectionnez le fournisseur AdvancedProv. (Le fournisseur AdvancedProv doit être inscrit automatiquement lorsque vous générez AdvancedPV mais, s'il ne figure pas dans la liste, exécutez regsvr32.exe sur AdvancedPV.dll.)

  6. Cliquez sur Next pour passer à l'onglet Connexion puis, dans Entrez le catalogue initial à utiliser, spécifiez le catalogue initial à utiliser (chemin d'accès à DataFile.dat).

  7. Dans Sélectionner l'objet de base de données, ouvrez Tables ; un seul élément doit apparaître (chemin d'accès à DataFile.dat). Sélectionnez cet élément et cliquez sur OK. Lorsque vous retournez à l'Assistant Consommateur OLE DB ATL, sélectionnez Table, affectez à la classe un nom plus court (si nécessaire) tel que CMyCons, puis cliquez sur Terminer. Générez le projet consommateur.

  8. Ajoutez ce qui suit au code principal de votre projet :

    #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. Placez un point d'arrêt sur la fonction CoUninitialize ; ainsi, la console restera ouverte et vous pourrez voir les résultats. Exécutez l'application en cliquant sur le bouton Démarrer (ou cliquez dans le menu Déboguer sur Exécuter sans débogage). Cinq colonnes devraient s'imprimer (une colonne d'index et quatre colonnes de texte).

Mots clés

Cet exemple utilise les interfaces suivantes :

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

Cet exemple illustre l'utilisation des classes suivantes :

CSchemaRowsetImpl, CComObjectRootEx, CComObjectRootEx, CRowsetImpl, CFileArray, CSimpleRow

Cet exemple illustre l'utilisation des macros suivantes :

COM_INTERFACE_ENTRY, PROPERTY_INFO_ENTRY

Voir aussi

Autres ressources

Exemples ATL