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.
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.
OpenAllmembuka sumber data, set baris, dan mengaktifkan marka buku jika tersedia.CloseAllmenutup semua set baris yang terbuka dan merilis semua eksekusi perintah.OpenRowsetdipanggil olehOpenAlluntuk membuka rowset atau rowset konsumen.GetRowsetPropertiesmengambil penunjuk ke kumpulan properti kumpulan baris yang propertinya dapat diatur.OpenDataSourcemembuka sumber data menggunakan string inisialisasi yang Anda tentukan dalam kotak dialog Properti Tautan Data.CloseDataSourcemenutup 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.