Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ATL OLE DB Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. yine de işlevselliği el ile ekleyebilirsiniz. Daha fazla bilgi için bkz . Sihirbaz Kullanmadan Tüketici Oluşturma.
Aşağıdaki konular, basit bir tüketici oluşturmak için MFC Uygulama Sihirbazı ve ATL OLE DB Tüketici Sihirbazı tarafından oluşturulan dosyaların nasıl düzenleneceğini gösterir. Bu örnekte aşağıdaki bölümler vardır:
Tüketici ile Veri alma işlemi, tüketicide bir veritabanı tablosundan satır satır tüm verileri okuyan kodun nasıl uygulandığını gösterir.
Tüketiciye Yer İşareti Desteği eklemek, tüketiciye yer işareti desteği eklemeyi gösterir.
Not
ve Provider örnek sağlayıcılarını test MyProv etmek için bu bölümde açıklanan tüketici uygulamasını kullanabilirsiniz.
Not
Test MyProv etmek üzere bir tüketici uygulaması oluşturmak için (Basit Salt Okunur Sağlayıcıyı Geliştirme bölümünde açıklanan sağlayıcı) Tüketiciye Yer İşareti Desteği Ekleme bölümünde açıklandığı gibi yer işareti desteği eklemeniz gerekir.
Tüketici ile Veri Alma
Konsol uygulamasını OLE DB tüketicisini kullanacak şekilde değiştirmek için
içinde
MyCons.cpp, kalın metni aşağıdaki gibi ekleyerek ana kodu değiştirin:// 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; }
Tüketiciye Yer İşareti Desteği Ekleme
Yer işareti, tablodaki satırları benzersiz olarak tanımlayan bir sütundur. Genellikle anahtar sütun olur, ancak her zaman değildir; sağlayıcıya özgü. Bu bölümde yer işareti desteğinin nasıl ekleneceği gösterilmektedir. Bunu yapmak için kullanıcı kayıt sınıfında aşağıdaki adımları uygulamanız gerekir:
Yer işaretlerinin örneğini oluşturma. Bunlar CBookmark türünde nesnelerdir.
özelliğini ayarlayarak
DBPROP_IRowsetLocatesağlayıcıdan bir yer işareti sütunu isteyin.BOOKMARK_ENTRY makroyu kullanarak sütun eşlemesine yer işareti girişi ekleyin.
Önceki adımlar size yer işareti desteği ve birlikte çalışacağınız bir yer işareti nesnesi sağlar. Bu kod örneği aşağıdaki gibi bir yer işareti gösterir:
Yazmak için bir dosya açın.
Satır kümesi verilerini satır satır dosya satırına aktarın.
MoveToBookmark çağrısı yaparak satır kümesi imlecini yer işaretine taşıyın.
Yer işareti eklenmiş satırı, dosyanın sonuna ekleyerek çıkışını yapın.
Not
Örnek sağlayıcı uygulamasını test Provider etmek için bu tüketici uygulamasını kullanıyorsanız, bu bölümde açıklanan yer işareti desteğini dışarıda bırakın.
Yer işaretini örneklemek için
Erişimcinin CBookmark türünde bir nesneyi tutması gerekir. nSize parametresi, yer işareti arabelleğinin boyutunu bayt cinsinden belirtir (genellikle 32 bit platformlar için 4 ve 64 bit platformlar için 8). Kullanıcı kayıt sınıfındaki sütun veri üyelerine aşağıdaki bildirimi ekleyin:
////////////////////////////////////////////////////////////////////// // Products.h class CProductsAccessor { public: CBookmark<4> m_bookmark; // Add bookmark declaration LONG m_ProductID; ...
Sağlayıcıdan yer işareti sütunu istemek için
Kullanıcı kayıt sınıfındaki
GetRowsetPropertiesyöntemine aşağıdaki kodu ekleyin:// 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); }
Sütun eşlemesine yer işareti girişi eklemek için
Kullanıcı kayıt sınıfındaki sütun eşlemesine aşağıdaki girdiyi ekleyin:
// 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()
Ana kodunuzda yer işareti kullanmak için
MyCons.cppDaha önce oluşturduğunuz konsol uygulamasındaki dosyada, ana kodu aşağıdaki gibi okuyacak şekilde değiştirin. Yer işaretlerini kullanmak için ana kodun kendi yer işareti nesnesinin (myBookmark) örneğini oluşturması gerekir; bu, erişimcidekinden (m_bookmark) farklı bir yer işaretidir./////////////////////////////////////////////////////////////////////// // 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; }
Yer işaretleri hakkında daha fazla bilgi için bkz . Yer İşaretlerini Kullanma. Satır Kümelerini Güncelleştirme bölümünde yer işareti örnekleri de gösterilir.