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


Выборка данных

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

После открытия источника данных, сеанса и объектов набора строк можно производить выборку данных. В зависимости от используемого типа метода доступа, возможно, понадобится провести привязку столбцов.

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

  1. Откройте набор строк с помощью соответствующей команды Открыть.

  2. Если используется метод доступа CManualAccessor, следует выполнить привязку выходных столбцов, если это еще не сделано. Для привязки столбцов необходимо вызвать метод GetColumnInfo и создать метод доступа с привязками, как показано в следующем примере:

    // 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. Добавьте цикл while, чтобы получить данные. В цикле вызывайте метод MoveNext, чтобы передвигать курсор и проверять возвращаемое значение на равенство значению S_OK, как показано в следующем примере:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. В цикле while можно производить выборку данных в соответствии с используемым типом метода доступа.

    • Если используется класс CAccessor, необходимо наличие пользовательской записи, содержащей элементы данных. Доступ к данным можно получить, используя эти элементы данных, как показано в следующем примере:

      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); 
      }
      
    • Если используется класс CDynamicAccessor или CDynamicParameterAccessor, можно произвести выборку данных с помощью функций доступа GetValue и GetColumn, как показано в следующем примере. Если требуется определить тип используемых данных, можно воспользоваться методом 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);
          }
      }
      
    • Если используется класс CManualAccessor, необходимо указать собственные элементы данных, самостоятельно осуществить их привязку и обратиться к ним напрямую, как показано в следующем примере:

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

См. также

Ссылки

Работа с шаблонами объекта-получателя OLE DB