Kelas CCommand
Menyediakan metode untuk mengatur dan menjalankan perintah.
Sintaks
template <class TAccessor = CNoAccessor,
template <typename T> class TRowset = CRowset,
class TMultiple = CNoMultipleResults>
class CCommand :
public CAccessorRowset <TAccessor, TRowset>,
public CCommandBase,
public TMultiple
Parameter
TAccessor
Jenis kelas aksesor (seperti CDynamicParameterAccessor
, , CDynamicStringAccessor
atau CEnumeratorAccessor
) yang Anda inginkan untuk digunakan perintah. Defaultnya adalah CNoAccessor
, yang menentukan bahwa kelas tidak mendukung parameter atau kolom output.
TRowset
Jenis kelas set baris (seperti CArrayRowset
atau CNoRowset
) yang Anda inginkan untuk digunakan perintah. Default adalah CRowset
.
TMultiple
Untuk menggunakan perintah OLE DB yang dapat mengembalikan beberapa hasil, tentukan CMultipleResults. Jika tidak, gunakan CNoMultipleResults. Untuk detailnya, lihat IMultipleResults.
Persyaratan
Header: atldbcli.h
Anggota
Metode
Nama | Deskripsi |
---|---|
Tutup | Menutup perintah saat ini. |
GetNextResult | Mengambil hasil berikutnya saat menggunakan beberapa tataan hasil. |
Buka | Menjalankan dan secara opsional mengikat perintah. |
Metode yang Diwarisi
Nama | Deskripsi |
---|---|
Buat | Membuat perintah baru untuk sesi yang ditentukan, lalu mengatur teks perintah. |
BuatCommand | Membuat perintah baru. |
GetParameterInfo | Mendapatkan daftar parameter perintah, nama, dan jenisnya. |
Siapkan | Memvalidasi dan mengoptimalkan perintah saat ini. |
ReleaseCommand | Merilis aksesor parameter jika perlu, lalu merilis perintah. |
SetParameterInfo | Menentukan jenis asli dari setiap parameter perintah. |
Batalkan pra-penyebaran | Membuang rencana eksekusi perintah saat ini. |
Keterangan
Gunakan kelas ini saat Anda perlu melakukan operasi berbasis parameter atau menjalankan perintah. Jika Anda hanya perlu membuka set baris sederhana, gunakan CTable sebagai gantinya.
Kelas aksesor yang Anda gunakan menentukan metode pengikatan parameter dan data.
Perhatikan bahwa Anda tidak dapat menggunakan prosedur tersimpan dengan Penyedia OLE DB untuk Jet karena penyedia tersebut tidak mendukung prosedur tersimpan (hanya konstanta yang diizinkan dalam string kueri).
CCommand::Close
Merilis kumpulan baris aksesor yang terkait dengan perintah .
Sintaks
void Close();
Keterangan
Perintah menggunakan rowset, aksesor tataan hasil, dan (opsional) aksesor parameter (tidak seperti tabel, yang tidak mendukung parameter dan tidak memerlukan aksesor parameter).
Saat Anda menjalankan perintah, Anda harus memanggil dan Close
ReleaseCommand setelah perintah.
Ketika Anda ingin menjalankan perintah yang sama berulang kali, Anda harus merilis setiap aksesor set hasil dengan memanggil Close
sebelum memanggil Execute
. Di akhir seri, Anda harus merilis aksesor parameter dengan memanggil ReleaseCommand
. Skenario umum lainnya adalah memanggil prosedur tersimpan yang memiliki parameter output. Pada banyak penyedia (seperti penyedia OLE DB untuk SQL Server) nilai parameter output tidak akan dapat diakses sampai Anda menutup aksesor tataan hasil. Panggil Close
untuk menutup set baris yang dikembalikan dan aksesor kumpulan hasil, tetapi bukan aksesor parameter, sehingga memungkinkan Anda untuk mengambil nilai parameter output.
Contoh
Contoh berikut menunjukkan bagaimana Anda dapat memanggil Close
dan ReleaseCommand
kapan Anda menjalankan perintah yang sama berulang kali.
void DoCCommandTest()
{
HRESULT hr;
hr = CoInitialize(NULL);
CCustomer rs; // Your CCommand-derived class
rs.m_BillingID = 6611; // Open billing ID 6611
hr = rs.OpenAll(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the first command execution
rs.Close();
rs.m_BillingID = 3333; // Open billing ID 3333 (a new customer)
hr = rs.Open(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the second command execution;
// Instead of the two following lines
// you could simply call rs.CloseAll()
// (a wizard-generated method):
rs.Close();
rs.ReleaseCommand();
CoUninitialize();
}
CCommand::GetNextResult
Mengambil tataan hasil berikutnya jika tersedia.
Sintaks
HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
bool bBind = true) throw();
Parameter
pulRowsAffected
[masuk/keluar] Penunjuk ke memori tempat jumlah baris yang terpengaruh oleh perintah dikembalikan.
bBind
[di] Menentukan apakah akan mengikat perintah secara otomatis setelah dijalankan. Defaultnya adalah true
, yang menyebabkan perintah terikat secara otomatis. Mengatur bBind untuk false
mencegah pengikatan otomatis perintah sehingga Anda dapat mengikat secara manual. (Pengikatan manual sangat menarik bagi pengguna OLAP.)
Tampilkan Nilai
HRESULT standar.
Keterangan
Jika kumpulan hasil telah diambil sebelumnya, fungsi ini merilis tataan hasil sebelumnya dan membatalkan ikatan kolom. Jika bBind adalah true
, bBind mengikat kolom baru.
Anda harus memanggil fungsi ini hanya jika Anda telah menentukan beberapa hasil dengan mengatur CCommand
parameter templat TMultipleCMultipleResults
=.
CCommand::Open
Menjalankan dan secara opsional mengikat perintah.
Sintaks
HRESULT Open(const CSession& session,
LPCWSTR wszCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
LPCSTR szCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
INT szCommand = NULL,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
bool bBind = true,
ULONG ulPropSets = 0) throw();
Parameter
sesi
[di] Sesi untuk menjalankan perintah.
wszCommand
[di] Perintah untuk dijalankan, diteruskan sebagai string Unicode. Dapat berupa NULL saat menggunakan CAccessor
, dalam hal ini perintah akan diambil dari nilai yang diteruskan ke makro DEFINE_COMMAND . Lihat ICommand::Execute di Referensi Programmer OLE DB untuk detailnya.
szCommand
[di] Sama seperti wszCommand kecuali bahwa parameter ini mengambil string perintah ANSI. Bentuk keempat metode ini dapat mengambil nilai NULL. Lihat "Komentar" nanti dalam topik ini untuk detailnya.
pPropSet
[di] Penunjuk ke array struktur DBPROPSET yang berisi properti dan nilai yang akan diatur. Lihat Kumpulan Properti dan Grup Properti di Referensi Programmer OLE DB di Windows SDK.
pRowsAffected
[masuk/keluar] Penunjuk ke memori tempat jumlah baris yang terpengaruh oleh perintah dikembalikan. Jika *pRowsAffected adalah NULL, tidak ada jumlah baris yang dikembalikan. Jika tidak, Open
tetapkan *pRowsAffected sesuai dengan kondisi berikut:
Jika | Kemudian |
---|---|
Elemen cParamSets pParams lebih besar dari 1 |
*pRowsAffected mewakili jumlah total baris yang dipengaruhi oleh semua set parameter yang ditentukan dalam eksekusi. |
Jumlah baris yang terpengaruh tidak tersedia | *pRowsAffected diatur ke -1. |
Perintah tidak memperbarui, menghapus, atau menyisipkan baris | *pRowsAffected tidak terdefinisi. |
guidCommand
[di] GUID yang menentukan sintaksis dan aturan umum untuk digunakan penyedia dalam mengurai teks perintah. Lihat ICommandText::GetCommandText dan ICommandText::SetCommandText di Referensi Programmer OLE DB untuk detailnya.
bBind
[di] Menentukan apakah akan mengikat perintah secara otomatis setelah dijalankan. Defaultnya adalah true
, yang menyebabkan perintah terikat secara otomatis. Mengatur bBind untuk false
mencegah pengikatan otomatis perintah sehingga Anda dapat mengikat secara manual. (Pengikatan manual sangat menarik bagi pengguna OLAP.)
ulPropSets
[di] Jumlah struktur DBPROPSET yang diteruskan dalam argumen pPropSet.
Tampilkan Nilai
HRESULT standar.
Keterangan
Tiga bentuk pertama mengambil Open
sesi, membuat perintah, dan menjalankan perintah, mengikat parameter apa pun seperlunya.
Bentuk pertama mengambil Open
string perintah Unicode dan tidak memiliki nilai default.
Bentuk kedua mengambil Open
string perintah ANSI dan tanpa nilai default (disediakan untuk kompatibilitas mundur dengan aplikasi ANSI yang ada).
Bentuk ketiga memungkinkan Open
string perintah menjadi NULL, karena jenis int
dengan nilai default NULL. Ini disediakan untuk memanggil Open(session, NULL);
atau Open(session);
karena NULL berjenis int
. Versi ini memerlukan dan menegaskan bahwa parameter adalah int
NULL.
Gunakan bentuk keempat saat Open
Anda telah membuat perintah dan Anda ingin melakukan satu Persiapan dan beberapa eksekusi.
Catatan
Open
Execute
panggilan , yang pada gilirannya memanggil GetNextResult
.
CCommand::Create
Memanggil CCommand::CreateCommand untuk membuat perintah untuk sesi yang ditentukan, lalu memanggil ICommandText::SetCommandText untuk menentukan teks perintah.
Sintaks
HRESULT CCommandBase::Create(const CSession& session,
LPCWSTR wszCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
HRESULT CCommandBase::Create(const CSession& session,
LPCSTR szCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
Parameter
sesi
[di] Sesi untuk membuat perintah.
wszCommand
[di] Penunjuk ke teks Unicode dari string perintah.
szCommand
[di] Penunjuk ke teks ANSI dari string perintah.
guidCommand
[di] GUID yang menentukan sintaksis dan aturan umum untuk digunakan penyedia dalam mengurai teks perintah. Untuk deskripsi dialek, lihat ICommandText::GetCommandText di Referensi Programmer OLE DB.
Tampilkan Nilai
HRESULT standar.
Keterangan
Bentuk pertama mengambil Create
string perintah Unicode. Bentuk kedua mengambil Create
string perintah ANSI (disediakan untuk kompatibilitas mundur dengan aplikasi ANSI yang ada).
CCommand::CreateCommand
Membuat perintah baru.
Sintaks
HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();
Parameter
sesi
[di] Objek CSession
yang akan dikaitkan dengan perintah baru.
Tampilkan Nilai
HRESULT standar.
Keterangan
Metode ini membuat perintah menggunakan objek sesi yang ditentukan.
CCommand::GetParameterInfo
Mendapatkan daftar parameter perintah, nama, dan jenisnya.
Sintaks
HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,
DBPARAMINFO** ppParamInfo,
OLECHAR** ppNamesBuffer) throw ();
Parameter
Lihat ICommandWithParameters::GetParameterInfo di Referensi Programmer OLE DB.
Tampilkan Nilai
HRESULT standar.
CCommand::P repare
Memvalidasi dan mengoptimalkan perintah saat ini.
Sintaks
HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();
Parameter
cExpectedRuns
[di] Berapa kali Anda berharap untuk menjalankan perintah.
Tampilkan Nilai
HRESULT standar.
Keterangan
Metode ini membungkus metode OLE DB ICommandPrepare::P repare.
CCommand::ReleaseCommand
Merilis aksesor parameter, lalu merilis perintah itu sendiri.
Sintaks
void CCommandBase::ReleaseCommand() throw();
Keterangan
ReleaseCommand
digunakan bersama dengan Close
. Lihat Tutup untuk detail penggunaan.
CCommand::SetParameterInfo
Menentukan jenis asli dari setiap parameter perintah.
Sintaks
HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
const DBORDINAL* pOrdinals,
const DBPARAMBINDINFO* pParamInfo) throw();
Parameter
Lihat ICommandWithParameters::SetParameterInfo di Referensi Programmer OLE DB.
Tampilkan Nilai
HRESULT standar.
CCommand::Unprepare
Membuang rencana eksekusi perintah saat ini.
Sintaks
HRESULT CCommandBase::Unprepare() throw();
Tampilkan Nilai
HRESULT standar.
Keterangan
Metode ini membungkus metode OLE DB ICommandPrepare::Unprepare.