Bagikan melalui


Menerapkan Konsumen Sederhana

Wizard Konsumen ATL OLE DB tidak tersedia di Visual Studio 2019 dan yang lebih baru. Anda masih dapat menambahkan fungsionalitas secara manual. Untuk informasi selengkapnya, lihat Membuat Konsumen Tanpa Menggunakan Wizard.

Topik berikut menunjukkan cara mengedit file yang dibuat oleh Wizard Aplikasi MFC dan Wizard Konsumen ATL OLE DB untuk membuat konsumen sederhana. Contoh ini memiliki bagian berikut:

Catatan

Anda dapat menggunakan aplikasi konsumen yang dijelaskan di bagian ini untuk menguji MyProv penyedia sampel dan Provider .

Catatan

Untuk membangun aplikasi konsumen untuk diuji MyProv (penyedia yang sama yang dijelaskan dalam Meningkatkan Penyedia Baca-Saja Sederhana), Anda harus menyertakan dukungan bookmark seperti yang dijelaskan dalam Menambahkan Dukungan Bookmark ke Konsumen.

Mengambil Data dengan Konsumen

Untuk memodifikasi aplikasi konsol untuk menggunakan konsumen OLE DB

  1. Di MyCons.cpp, ubah kode utama dengan menyisipkan teks tebal sebagai berikut:

    // MyCons.cpp : Defines the entry point for the console application.
    //
    #include "pch.h" // "stdafx.h" in Visual Studio 2017 and earlier
    #include "Products.h"
    ...
    int main(int argc, char* argv[])
    {
       HRESULT hr = CoInitialize(NULL);   // Instantiate rowset
       CProducts rs;
       hr = rs.OpenAll();
       ATLASSERT(SUCCEEDED(hr ) );
       hr = rs.MoveFirst();   // Iterate through the rowset
       while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )   {      // Print out the column information for each row
         printf("Product ID: %d, Name: %s, Unit Price: %d, Quantity per Unit: %d, Units in Stock %d, Reorder Level %d\n",
           rs.m_ProductID, rs.m_ProductName, rs.m_UnitPrice, rs.m_QuantityPerUnit, rs.m_UnitsInStock, rs.m_ReorderLevel );
         hr = rs.MoveNext();   }
       rs.Close();
       rs.ReleaseCommand();
       CoUninitialize();
    
       return 0;
    }
    

Menambahkan Dukungan Bookmark ke Konsumen

Bookmark adalah kolom yang secara unik mengidentifikasi baris dalam tabel. Biasanya ini adalah kolom kunci, tetapi tidak selalu; ini khusus penyedia. Bagian ini memperlihatkan kepada Anda cara menambahkan dukungan bookmark. Untuk melakukannya, Anda perlu melakukan langkah-langkah berikut di kelas catatan pengguna:

  • Buat instans marka buku. Ini adalah objek jenis CBookmark.

  • Minta kolom bookmark dari penyedia dengan mengatur DBPROP_IRowsetLocate properti .

  • Tambahkan entri bookmark ke peta kolom dengan menggunakan makro BOOKMARK_ENTRY .

Langkah-langkah sebelumnya memberi Anda dukungan bookmark dan objek bookmark yang akan berfungsi. Contoh kode ini menunjukkan marka buku sebagai berikut:

  • Buka file untuk ditulis.

  • Output data himpunan baris ke baris file menurut baris.

  • Pindahkan kursor set baris ke marka buku dengan memanggil MoveToBookmark.

  • Keluarkan baris marka buku, tambahkan ke akhir file.

Catatan

Jika Anda menggunakan aplikasi konsumen ini untuk menguji Provider aplikasi penyedia sampel, tinggalkan dukungan bookmark yang dijelaskan di bagian ini.

Untuk membuat contoh marka buku

  1. Aksesor perlu menyimpan objek jenis CBookmark. Parameter nSize menentukan ukuran buffer bookmark dalam byte (biasanya 4 untuk platform 32-bit dan 8 untuk platform 64-bit). Tambahkan deklarasi berikut ke anggota data kolom di kelas rekaman pengguna:

    //////////////////////////////////////////////////////////////////////
    // Products.h
    class CProductsAccessor
    {
    public:
       CBookmark<4> m_bookmark;   // Add bookmark declaration
       LONG m_ProductID;
       ...
    

Untuk meminta kolom bookmark dari penyedia

  1. Tambahkan kode berikut dalam GetRowsetProperties metode di kelas rekaman pengguna:

    // Set the DBPROP_IRowsetLocate property.
    void GetRowsetProperties(CDBPropSet* pPropSet)
    {
       pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
       pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
       // Add DBPROP_IRowsetLocate property to support bookmarks   pPropSet->AddProperty(DBPROP_IRowsetLocate, true);
    }
    

Untuk menambahkan entri bookmark ke peta kolom

  1. Tambahkan entri berikut ke peta kolom di kelas catatan pengguna:

    // Set a bookmark entry in the column map.
    BEGIN_COLUMN_MAP(CProductsAccessor)
       BOOKMARK_ENTRY(m_bookmark)   // Add bookmark entry
       COLUMN_ENTRY_LENGTH_STATUS(1, m_ProductID, m_dwProductIDLength, m_dwProductIDStatus)
       COLUMN_ENTRY_LENGTH_STATUS(2, m_ProductName, m_dwProductNameLength, m_dwProductNameStatus)
    ...
    END_COLUMN_MAP()
    

Untuk menggunakan bookmark dalam kode utama Anda

  1. MyCons.cpp Dalam file dari aplikasi konsol yang sebelumnya Anda buat, ubah kode utama untuk dibaca sebagai berikut. Untuk menggunakan marka buku, kode utama perlu membuat instans objek marka bukunya sendiri (myBookmark); ini adalah marka buku yang berbeda dari yang ada di aksesor (m_bookmark).

    ///////////////////////////////////////////////////////////////////////
    // MyCons.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "Products.h"
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
       HRESULT hr = CoInitialize(NULL);
    
       // Instantiate rowset
       CProducts rs;
    
       hr = rs.OpenAll();
       hr = rs.MoveFirst();
    
       // Cast CURRENCY m_UnitPrice to a long value
       LONGLONG lPrice = rs.m_UnitPrice.int64;
    
       // Open file output.txt for writing in overwrite mode
       ofstream outfile( "C:\\output.txt", ios::out );
    
       if (!outfile)      // Test for invalid file
          return -1;
    
       // Instantiate a bookmark object myBookmark for the main code
       CBookmark<4> myBookmark;
       int nCounter = 0;
    
       // Iterate through the rowset and output column data to output.txt row by row
       // In the file, mark the beginning of this set of data:
       outfile << "initial row dump" << endl;
       while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
       {
          nCounter++;
          if(nCounter == 5 )
             myBookmark = rs.m_bookmark;
          // Output the column information for each row:
          outfile << rs.m_ProductID << rs.m_ProductName << lPrice << rs.m_QuantityPerUnit << rs.m_UnitsInStock << rs.m_ReorderLevel << endl;
          hr = rs.MoveNext();
       }
    
       // Move cursor to bookmark
       hr = rs.MoveToBookmark(myBookmark);
    
       // Iterate through the rowset and output column data to output.txt row by row
       // In the file, mark the beginning of this set of data:
       outfile << "row dump starting from bookmarked row" << endl;
       while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
       {
          // Output the column information for each row
          outfile << rs.m_ProductID << rs.m_ProductName << lPrice << rs.m_QuantityPerUnit << rs.m_UnitsInStock << rs.m_ReorderLevel << endl;
          hr = rs.MoveNext();
       }
    
       rs.CloseAll();
       CoUninitialize();
    
       return 0;
    }
    

Untuk informasi selengkapnya tentang marka buku, lihat Menggunakan Bookmark. Contoh marka buku juga ditampilkan di Memperbarui Set Baris.

Lihat juga

Membuat Konsumen OLE DB Menggunakan Wizard