Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
Mengambil Data dengan Konsumen menunjukkan cara menerapkan kode di konsumen yang membaca semua data, baris demi baris, dari tabel database.
Menambahkan Dukungan Bookmark ke Konsumen menunjukkan cara menambahkan dukungan bookmark ke konsumen.
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
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_IRowsetLocateproperti .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
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
Tambahkan kode berikut dalam
GetRowsetPropertiesmetode 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
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
MyCons.cppDalam 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.