Freigeben über


Abrufen von Daten

Nachdem Sie die Datenquellen-, Sitzungs- und Rowsetobjekte geöffnet haben, können Sie Daten abrufen. Je nachdem, welche Art von Accessor Sie verwenden, müssen Sie möglicherweise Spalten binden.

So rufen Sie Daten ab

  1. Öffnen Sie das Rowset mit dem entsprechenden Befehl "Öffnen ".

  2. Wenn Sie die Ausgabespalten verwenden CManualAccessor, binden Sie die Ausgabespalten, sofern dies noch nicht geschehen ist. Das folgende Beispiel stammt aus dem DBViewer-Beispiel . So binden Sie die Spalten, rufen Sie GetColumnInfoauf, und erstellen Sie dann einen Accessor mit den Bindungen, wie im folgenden Beispiel gezeigt:

    // 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. Schreiben Sie eine while Schleife, um die Daten abzurufen. Rufen Sie in der Schleife auf MoveNext , um den Cursor zu durchlaufen und den Rückgabewert anhand S_OK zu testen, wie im folgenden Beispiel gezeigt:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. Innerhalb der while Schleife können Sie die Daten gemäß Ihrem Accessortyp abrufen.

    • Wenn Sie die CAccessor-Klasse verwenden, sollten Sie über einen Benutzerdatensatz verfügen, der Datenmember enthält. Sie können auf Ihre Daten mithilfe dieser Datenmmber zugreifen, wie im folgenden Beispiel gezeigt:

      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);
      }
      
    • Wenn Sie die Klasse oder CDynamicParameterAccessor die CDynamicAccessor Klasse verwenden, können Sie Daten abrufen, indem Sie die Zugriffsfunktionen GetValue verwenden und GetColumn, wie im folgenden Beispiel gezeigt. Wenn Sie den Datentyp bestimmen möchten, den Sie verwenden, verwenden GetTypeSie .

      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);
          }
      }
      
    • Wenn Sie verwenden CManualAccessor, müssen Sie Ihre eigenen Datenmmber angeben, sie selbst binden und direkt darauf zugreifen, wie im folgenden Beispiel gezeigt:

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

Siehe auch

Arbeiten mit OLE DB-Consumervorlagen