Partager via


Extraction de données

Une fois que vous avez ouvert la source de données, la session et les objets d’ensemble de lignes, vous pouvez extraire des données. Selon le type d’accesseur que vous utilisez, vous devrez peut-être lier des colonnes.

Pour extraire des données

  1. Ouvrez l’ensemble de lignes à l’aide de la commande Open appropriée.

  2. Si vous utilisez CManualAccessor, liez les colonnes de sortie si vous ne l’avez pas déjà fait. L’exemple suivant est extrait de l’exemple DBViewer . Pour lier les colonnes, appelez GetColumnInfo, puis créez un accesseur avec les liaisons, comme illustré dans l’exemple suivant :

    // From the DBViewer Sample CDBTreeView::OnQueryEdit
    // Get the column information
    ULONG ulColumns       = 0;
    DBCOLUMNINFO* pColumnInfo  = NULL;
    LPOLESTR pStrings      = NULL;
    if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK)
        ThrowMyOLEDBException(rs.m_pRowset, IID_IColumnsInfo);
    struct MYBIND* pBind = new MYBIND[ulColumns];
    rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns);
    for (ULONG l=0; l<ulColumns; l++)
    rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus);
    rs.Bind();
    
  3. Écrivez une while boucle pour récupérer les données. Dans la boucle, appelez MoveNext pour avancer le curseur et tester la valeur de retour sur S_OK, comme illustré dans l’exemple suivant :

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. Dans la while boucle, vous pouvez extraire les données en fonction de votre type d’accesseur.

    • Si vous utilisez la classe CAccessor , vous devez avoir un enregistrement utilisateur qui contient des membres de données. Vous pouvez accéder à vos données à l’aide de ces membres de données, comme illustré dans l’exemple suivant :

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members directly. In this case, m_nFooID
          // is declared in a user record that derives from
          // CAccessor
          wsprintf_s("%d", rs.m_nFooID);
      }
      
    • Si vous utilisez le ou CDynamicParameterAccessor la CDynamicAccessor classe, vous pouvez extraire des données à l’aide des fonctions GetValue d’accès etGetColumn, comme illustré dans l’exemple suivant. Si vous souhaitez déterminer le type de données que vous utilisez, utilisez GetType.

      while (rs.MoveNext() == S_OK)
      {
          // Use the dynamic accessor functions to retrieve your data.
      
          ULONG ulColumns = rs.GetColumnCount();
          for (ULONG i=0; i<ulColumns; i++)
          {
              rs.GetValue(i);
          }
      }
      
    • Si vous utilisez CManualAccessor, vous devez spécifier vos propres membres de données, les lier vous-même et y accéder directement, comme illustré dans l’exemple suivant :

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members you specified in the calls to
          // AddBindEntry.
      
          wsprintf_s("%s", szFoo);
      }
      

Voir aussi

Utilisation des modèles du consommateur OLE DB