Recupero di dati

Dopo aver aperto gli oggetti origine dati, sessione e set di righe, è possibile recuperare i dati. A seconda del tipo di funzione di accesso in uso, potrebbe essere necessario associare colonne.

Per recuperare i dati

  1. Aprire il set di righe usando il comando Open appropriato.

  2. Se si usa CManualAccessor, associare le colonne di output se non è già stato fatto. L'esempio seguente è tratto dall'esempio DBViewer . Per associare le colonne, chiamare GetColumnInfoe quindi creare una funzione di accesso con le associazioni, come illustrato nell'esempio seguente:

    // 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. Scrivere un while ciclo per recuperare i dati. Nel ciclo chiamare MoveNext per far avanzare il cursore e testare il valore restituito su S_OK, come illustrato nell'esempio seguente:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. All'interno del while ciclo è possibile recuperare i dati in base al tipo di funzione di accesso.

    • Se si usa la classe CAccessor , è necessario disporre di un record utente che contiene membri dati. È possibile accedere ai dati usando tali membri dati, come illustrato nell'esempio seguente:

      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);
      }
      
    • Se si usa la CDynamicAccessor classe o CDynamicParameterAccessor , è possibile recuperare i dati usando le funzioni GetValue di accesso e GetColumn, come illustrato nell'esempio seguente. Se si vuole determinare il tipo di dati in uso, usare 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);
          }
      }
      
    • Se si usa CManualAccessor, è necessario specificare i propri membri dati, associarli manualmente e accedervi direttamente, come illustrato nell'esempio seguente:

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

Vedi anche

Uso dei modelli consumer OLE DB