Bagikan melalui


Metode yang Dihasilkan Wizard Konsumen

Wizard Konsumen ATL OLE DB tidak tersedia di Visual Studio 2019 dan yang lebih baru. Anda masih dapat menambahkan fungsionalitas secara manual.

Wizard Konsumen ATL OLE DB dan Wizard Aplikasi MFC menghasilkan fungsi tertentu yang harus Anda ketahui. Beberapa metode diimplementasikan secara berbeda dalam proyek atribut, sehingga ada beberapa peringatan; setiap kasus tercakup di bawah ini. Untuk informasi tentang melihat kode yang disuntikkan, lihat Debugging Kode yang Disuntikkan.

  • OpenAll membuka sumber data, set baris, dan mengaktifkan marka buku jika tersedia.

  • CloseAll menutup semua set baris yang terbuka dan merilis semua eksekusi perintah.

  • OpenRowset dipanggil oleh OpenAll untuk membuka rowset atau rowset konsumen.

  • GetRowsetProperties mengambil penunjuk ke kumpulan properti kumpulan baris yang propertinya dapat diatur.

  • OpenDataSource membuka sumber data menggunakan string inisialisasi yang Anda tentukan dalam kotak dialog Properti Tautan Data.

  • CloseDataSource menutup sumber data dengan cara yang sesuai.

OpenAll dan CloseAll

HRESULT OpenAll();

void CloseAll();

Contoh berikut menunjukkan bagaimana Anda dapat memanggil OpenAll dan CloseAll kapan Anda menjalankan perintah yang sama berulang kali. Bandingkan contoh kode di CCommand::Close, yang menunjukkan variasi yang memanggil Close dan ReleaseCommand bukan CloseAll.

int main(int argc, char* argv[])
{
   HRESULT hr;

   hr = CoInitialize(NULL);

   CCustOrdersDetail rs;      // Your CCommand-derived class
   rs.m_OrderID = 10248;      // Open order 10248
   hr = rs.OpenAll();         // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

   // Close the first command execution
   rs.Close();

   rs.m_OrderID = 10249;      // Open order 10249 (a new order)
   hr = rs.Open();            // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

   // Close the second command execution;
   // Instead of rs.CloseAll() you could call
   // rs.Close() and rs.ReleaseCommand():
   rs.CloseAll();

   CoUninitialize();
   return 0;
}

Keterangan

Jika Anda menentukan HasBookmark metode, OpenAll kode mengatur DBPROP_IRowsetLocate properti; pastikan Anda hanya melakukan ini jika penyedia Anda mendukung properti tersebut.

OpenRowset

// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);

OpenAll memanggil metode ini untuk membuka set baris atau kumpulan baris di konsumen. Biasanya, Anda tidak perlu menelepon OpenRowset kecuali Anda ingin bekerja dengan beberapa sumber data/sesi/set baris. OpenRowset dideklarasikan dalam file header kelas perintah atau tabel:

// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
   HRESULT hr = Open(m_session, NULL, pPropSet);
   #ifdef _DEBUG
   if(FAILED(hr))
      AtlTraceErrorRecords(hr);
   #endif
   return hr;
}

Atribut menerapkan metode ini secara berbeda. Versi ini mengambil objek sesi dan string perintah yang default ke string perintah yang ditentukan dalam db_command, meskipun Anda dapat meneruskan yang berbeda. Jika Anda menentukan HasBookmark metode, OpenRowset kode mengatur DBPROP_IRowsetLocate properti; pastikan Anda hanya melakukan ini jika penyedia Anda mendukung properti tersebut.

// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand=NULL)
{

   DBPROPSET *pPropSet = NULL;
   CDBPropSet propset(DBPROPSET_ROWSET);
   __if_exists(HasBookmark)

   {
      propset.AddProperty(DBPROP_IRowsetLocate, true);
      pPropSet= &propset;
      }
...
}

GetRowsetProperties

void GetRowsetProperties(CDBPropSet* pPropSet);

Metode ini mengambil penunjuk ke kumpulan properti set baris; Anda dapat menggunakan penunjuk ini untuk mengatur properti seperti DBPROP_IRowsetChange. GetRowsetProperties digunakan di kelas rekaman pengguna sebagai berikut. Anda dapat mengubah kode ini untuk mengatur properti kumpulan baris tambahan:

void GetRowsetProperties(CDBPropSet* pPropSet)
{
   pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
}

Keterangan

Anda tidak boleh menentukan metode global GetRowsetProperties karena bisa berkonflik dengan metode yang ditentukan oleh wizard. Ini adalah metode yang dihasilkan wizard yang Anda dapatkan dengan proyek yang di-templat dan diatribusikan; atribut tidak menyuntikkan kode ini.

OpenDataSource dan CloseDataSource

HRESULT OpenDataSource();

void CloseDataSource();

Keterangan

Wizard menentukan metode OpenDataSource dan CloseDataSource; OpenDataSource memanggil CDataSource::OpenFromInitializationString.

Baca juga

Membuat Konsumen OLE DB Menggunakan Wizard