db_command
Membuat perintah OLE DB.
Sintaks
[ db_command(command, name, source_name, hresult, bindings, bulk_fetch) ]
Parameter
command
String perintah yang berisi teks perintah OLE DB. Contoh sederhananya adalah:
[ db_command ( command = "Select * from Products" ) ]
Sintaksnya command
adalah sebagai berikut:
blok parameter pengikatan 1
Perintah OLE DB
blok parameter pengikatan 2
kelanjutan perintah OLE DB
blok parameter pengikatan 3
...
Blok parameter pengikatan didefinisikan sebagai berikut:
(
bindtype
szVar1 [,
szVar2 [,
nVar3 [,
...]]])
di mana:
(
menandai awal blok pengikatan data.bindtype
adalah salah satu string yang tidak peka huruf besar/kecil berikut:[db_column]
mengikat setiap variabel anggota ke kolom dalam set baris.[bindto]
(sama seperti[db_column]
).[in]
mengikat variabel anggota sebagai parameter input.[out]
mengikat variabel anggota sebagai parameter output.[in,out]
mengikat variabel anggota sebagai parameter input/output.
szVarN, nVarN diselesaikan ke variabel anggota dalam cakupan saat ini.
)
menandai akhir blok pengikatan data.
Jika string perintah berisi satu atau beberapa penentu seperti [in]
, , [out]
atau [in/out]
, db_command
membangun peta parameter.
Jika string perintah berisi satu atau beberapa parameter seperti [db_column]
atau [bindto]
, maka db_command
menghasilkan set baris dan peta aksesor untuk melayani variabel terikat ini. Untuk informasi selengkapnya, lihat db_accessor
.
Catatan
bindtype
sintaksis dan bindings
parameter tidak valid saat menggunakan db_command
di tingkat kelas.
Berikut adalah beberapa contoh blok parameter pengikatan. Contoh berikut mengikat m_au_fname
anggota data dan m_au_lname
ke au_fname
kolom dan au_lname
, masing-masing, dari tabel penulis dalam pubs
database:
TCHAR m_au_fname[21];
TCHAR m_au_lname[41];
TCHAR m_state[3] = 'CA';
[db_command (command = "SELECT au_fname([bindto]m_au_fname), au_lname([bindto]m_au_lname) " \
"FROM dbo.authors " \
"WHERE state = ?([in]m_state)")
]
name
(Opsional) Nama handel yang Anda gunakan untuk bekerja dengan set baris. Jika Anda menentukan name
, db_command
menghasilkan kelas dengan , yang ditentukan name
, yang dapat digunakan untuk melintasi set baris atau untuk menjalankan beberapa kueri tindakan. Jika Anda tidak menentukan name
, tidak akan dimungkinkan untuk mengembalikan lebih dari satu baris hasil kepada pengguna.
source_name
(Opsional) Variabel CSession
atau instans kelas yang memiliki db_source
atribut yang diterapkan ke dalamnya tempat perintah dijalankan. Lihat db_source
.
db_command
memeriksa untuk memastikan bahwa variabel yang digunakan source_name
valid, sehingga variabel yang ditentukan harus dalam fungsi atau cakupan global.
hresult
(Opsional) Mengidentifikasi variabel yang akan menerima HRESULT dari perintah database ini. Jika variabel tidak ada, variabel akan secara otomatis disuntikkan oleh atribut .
bindings
(Opsional) Memungkinkan Anda memisahkan parameter pengikatan dari perintah OLE DB.
Jika Anda menentukan nilai untuk bindings
, db_command
uraikan nilai terkait dan tidak mengurai bindtype
parameter. Penggunaan ini memungkinkan Anda menggunakan sintaks penyedia OLE DB. Untuk menonaktifkan penguraian tanpa mengikat parameter, tentukan Bindings=""
.
Jika Anda tidak menentukan nilai untuk bindings
, db_command
uraikan blok parameter pengikatan. Ini mencari '(
', diikuti oleh bindtype
dalam tanda kurung siku, diikuti oleh satu atau beberapa variabel anggota C++ yang dinyatakan sebelumnya, diikuti oleh ')
'. Ini menghapus semua teks di antara tanda kurung dari perintah yang dihasilkan. Parameter ini digunakan untuk membuat pengikatan kolom dan parameter untuk perintah ini.
bulk_fetch
(Opsional) Nilai bilangan bulat yang menentukan jumlah baris yang akan diambil.
Nilai defaultnya adalah 1, yang menentukan pengambilan baris tunggal (set baris akan berjenis CRowset
).
Nilai yang lebih besar dari 1 menentukan pengambilan baris massal. Pengambilan baris massal mengacu pada kemampuan set baris massal untuk mengambil beberapa handel baris (set baris akan berjenis CBulkRowset
dan akan memanggil SetRows
dengan jumlah baris yang ditentukan).
Jika bulk_fetch
kurang dari satu, SetRows
akan mengembalikan nol.
Keterangan
db_command
CCommand
membuat objek, yang digunakan oleh konsumen OLE DB untuk menjalankan perintah.
Anda dapat menggunakan db_command
dengan cakupan kelas atau fungsi; perbedaan utamanya adalah cakupan CCommand
objek. Dengan cakupan fungsi, data seperti pengikatan berakhir pada akhir fungsi. Penggunaan cakupan kelas dan fungsi melibatkan kelas CCommand<>
Templat Konsumen OLE DB , tetapi argumen templat berbeda untuk kasus fungsi dan kelas. Dalam kasus fungsi, pengikatan akan dilakukan ke yang Accessor
terdiri dari variabel lokal, sementara penggunaan kelas akan menyimpulkan CAccessor
kelas -turunan sebagai argumen. Saat digunakan sebagai atribut kelas, db_command
bekerja sama dengan db_column
.
db_command
dapat digunakan untuk menjalankan perintah yang tidak mengembalikan tataan hasil.
Ketika penyedia atribut konsumen menerapkan atribut ini ke kelas, pengkompilasi mengganti nama kelas menjadi _[YourClassName]Accessor
, di mana [YourClassName]
adalah nama yang Anda berikan kelas. Pengkompilasi juga membuat kelas yang disebut [YourClassName]
, yang berasal dari _[YourClassName]Accessor
. Di Tampilan Kelas, Anda akan melihat kedua kelas.
Contoh
Sampel ini menentukan perintah yang memilih nama depan dan belakang dari tabel tempat kolom status cocok dengan 'CA'. db_command
membuat dan membaca set baris tempat Anda dapat memanggil fungsi yang dihasilkan wizard seperti OpenAll
dan CloseAll
, serta CRowset
fungsi anggota seperti MoveNext
.
Kode ini mengharuskan Anda untuk menyediakan string koneksi Anda sendiri yang tersambung ke pubs
database. Untuk informasi tentang cara menyediakan string koneksi di lingkungan pengembangan, lihat Cara: Menyambungkan ke database dan menelusuri objek yang ada dan Menambahkan koneksi baru.
File sumber db_command.h
:
// db_command.h
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>
#pragma once
[ db_source(L"your connection string"), db_command(L" \
SELECT au_lname, au_fname \
FROM dbo.authors \
WHERE state = 'CA'") ]
struct CAuthors {
// In order to fix several issues with some providers, the code below may bind
// columns in a different order than reported by the provider
DBSTATUS m_dwau_lnameStatus;
DBSTATUS m_dwau_fnameStatus;
DBLENGTH m_dwau_lnameLength;
DBLENGTH m_dwau_fnameLength;
[ db_column("au_lname", status="m_dwau_lnameStatus", length="m_dwau_lnameLength") ] TCHAR m_au_lname[41];
[ db_column("au_fname", status="m_dwau_fnameStatus", length="m_dwau_fnameLength") ] TCHAR m_au_fname[21];
[ db_param("7", paramtype="DBPARAMIO_INPUT") ] TCHAR m_state[3];
void GetRowsetProperties(CDBPropSet* pPropSet) {
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
}
};
File sumber db_command.cpp
:
// db_command.cpp
// compile with: /c
#include "db_command.h"
int main(int argc, _TCHAR* argv[]) {
HRESULT hr = CoInitialize(NULL);
// Instantiate rowset
CAuthors rs;
// Open rowset and move to first row
strcpy_s(rs.m_state, sizeof(rs.m_state), _T("CA"));
hr = rs.OpenAll();
hr = rs.MoveFirst();
// Iterate through the rowset
while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) {
// Print out the column information for each row
printf("First Name: %s, Last Name: %s\n", rs.m_au_fname, rs.m_au_lname);
hr = rs.MoveNext();
}
rs.CloseAll();
CoUninitialize();
}
Sampel ini menggunakan db_source
pada kelas CMySource
sumber data , dan db_command
pada kelas CCommand1
perintah dan CCommand2
.
// db_command_2.cpp
// compile with: /c
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>
// class usage for both db_source and db_command
[ db_source(L"your connection string"), db_command(L" \
SELECT au_lname, au_fname \
FROM dbo.authors \
WHERE state = 'CA'") ]
struct CMySource {
HRESULT OpenDataSource() {
return S_OK;
}
};
[db_command(command = "SELECT * FROM Products")]
class CCommand1 {};
[db_command(command = "SELECT FNAME, LNAME FROM Customers")]
class CCommand2 {};
int main() {
CMySource s;
HRESULT hr = s.OpenDataSource();
if (SUCCEEDED(hr)) {
CCommand1 c1;
hr = c1.Open(s);
CCommand2 c2;
hr = c2.Open(s);
}
s.CloseDataSource();
}
Persyaratan
Konteks atribut | Nilai |
---|---|
Berlaku untuk | class , struct , anggota, metode, lokal |
Berulang | No |
Atribut yang diperlukan | Tidak |
Atribut tidak valid | Tidak |
Untuk informasi selengkapnya tentang konteks atribut, lihat Konteks atribut.