Bagikan melalui


Mengambil data

Setelah membuka sumber data, sesi, dan objek set baris, Anda dapat mengambil data. Bergantung pada jenis aksesor yang Anda gunakan, Anda mungkin perlu mengikat kolom.

Untuk mengambil data

  1. Buka set baris menggunakan perintah Buka yang sesuai.

  2. Jika Anda menggunakan CManualAccessor, ikat kolom output jika Anda belum melakukannya. Contoh berikut diambil dari sampel DBViewer . Untuk mengikat kolom, panggil GetColumnInfo, lalu buat aksesor dengan pengikatan, seperti yang ditunjukkan dalam contoh berikut:

    // 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. Tulis perulangan while untuk mengambil data. Dalam perulangan, panggil MoveNext untuk memajukan kursor dan menguji nilai pengembalian terhadap S_OK, seperti yang ditunjukkan dalam contoh berikut:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. Dalam perulangan while , Anda dapat mengambil data sesuai dengan jenis aksesor Anda.

    • Jika Anda menggunakan kelas CAccessor , Anda harus memiliki catatan pengguna yang berisi anggota data. Anda dapat mengakses data menggunakan anggota data tersebut, seperti yang diperlihatkan dalam contoh berikut:

      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);
      }
      
    • Jika Anda menggunakan CDynamicAccessor kelas atau CDynamicParameterAccessor , Anda dapat mengambil data dengan menggunakan fungsi GetValue akses dan GetColumn, seperti yang ditunjukkan dalam contoh berikut. Jika Anda ingin menentukan jenis data yang Anda gunakan, gunakan 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);
          }
      }
      
    • Jika Anda menggunakan CManualAccessor, Anda harus menentukan anggota data Anda sendiri, mengikatnya sendiri, dan mengaksesnya secara langsung, seperti yang ditunjukkan dalam contoh berikut:

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

Lihat juga

Bekerja dengan Templat Konsumen OLE DB