Aracılığıyla paylaş


Basit Tüketici Uygulama

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

  1. 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_IRowsetLocate sağ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

  1. 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

  1. Kullanıcı kayıt sınıfındaki GetRowsetProperties yö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

  1. 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

  1. MyCons.cpp Daha ö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.

Ayrıca bkz.

Sihirbaz Kullanarak bir OLE DB Tüketicisi Oluşturma