Bagikan melalui


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_commandCCommand 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 CAccessorkelas -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 CMySourcesumber 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.

Lihat juga

Atribut konsumen OLE DB
Atribut yang berdiri sendiri