db_command
Vytvoří příkaz OLE DB.
Syntaxe
[ db_command(command, name, source_name, hresult, bindings, bulk_fetch) ]
Parametry
command
Řetězec příkazu obsahující text příkazu OLE DB. Jednoduchý příklad:
[ db_command ( command = "Select * from Products" ) ]
Syntaxe command
je následující:
binding parameter block 1
Příkaz OLE DB
binding parameter block 2
pokračování příkazu OLE DB
binding parameter block 3
...
Blok parametru vazby je definován takto:
(
bindtype
szVar1 [,
szVar2 [,
nVar3 [,
...]]])
kde:
(
označí začátek bloku datové vazby.bindtype
je jedním z následujících řetězců nerozlišující velká a malá písmena:[db_column]
vytvoří vazbu jednotlivých členských proměnných na sloupec v sadě řádků.[bindto]
(stejné jako[db_column]
).[in]
sváže členské proměnné jako vstupní parametry.[out]
sváže členské proměnné jako výstupní parametry.[in,out]
binds member variables as input/output parameters.
szVarN, nVarN přeloží na členské proměnné v aktuálním oboru.
)
označuje konec bloku datové vazby.
Pokud řetězec příkazu obsahuje jeden nebo více specifikátorů, například [in]
, [out]
nebo [in/out]
, db_command
vytvoří mapu parametrů.
Pokud řetězec příkazu obsahuje jeden nebo více parametrů, například [db_column]
nebo [bindto]
, pak db_command
vygeneruje jak sadu řádků, tak mapování přístupového objektu pro službu těchto vázaných proměnných. Další informace najdete na webu db_accessor
.
Poznámka:
bindtype
syntaxe a bindings
parametr nejsou platné při použití db_command
na úrovni třídy.
Tady je několik příkladů vazeb bloků parametrů. Následující příklad vytvoří vazbu členů m_au_fname
a m_au_lname
datových členů na au_fname
sloupce a au_lname
sloupce v tabulce autorů v pubs
databázi:
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
(Volitelné) Název popisovače, který používáte pro práci se sadou řádků. Pokud zadáte name
, db_command
vygeneruje třídu se zadaným name
, který lze použít k procházení sady řádků nebo ke spuštění více akčních dotazů. Pokud nezadáte name
, nebude možné uživateli vrátit více než jeden řádek výsledků.
source_name
(Volitelné) Proměnná CSession
nebo instance třídy, která má db_source
atribut použitý na něj, na kterém se příkaz spustí. Viz třída db_source
.
db_command
zkontroluje, zda je proměnná používaná pro source_name
platná, takže zadaná proměnná by měla být ve funkci nebo globálním oboru.
hresult
(Volitelné) Identifikuje proměnnou, která obdrží HRESULT tohoto databázového příkazu. Pokud proměnná neexistuje, automaticky se vloží atributem.
bindings
(Volitelné) Umožňuje oddělit parametry vazby od příkazu OLE DB.
Pokud zadáte hodnotu pro bindings
, db_command
parsuje přidruženou hodnotu a parsuje bindtype
parametr. Toto použití umožňuje použít syntaxi zprostředkovatele OLE DB. Chcete-li zakázat parsování bez parametrů vazby, zadejte Bindings=""
.
Pokud nezadáte hodnotu pro bindings
, db_command
parsuje blok vazby parametru. Vyhledá výraz '(
' následovaný bindtype
v hranatých závorkách, následovaný jednou nebo více dříve deklarovanými členskými proměnnými jazyka C++, následovanými ')
'. Odstraní veškerý text mezi závorky z výsledného příkazu. Tyto parametry slouží k vytvoření vazeb sloupců a parametrů pro tento příkaz.
bulk_fetch
(Volitelné) Celočíselná hodnota, která určuje počet řádků, které se mají načíst.
Výchozí hodnota je 1, která určuje načtení jednoho řádku (sada řádků bude typu CRowset
).
Hodnota větší než 1 určuje hromadné načítání řádků. Hromadné načítání řádků odkazuje na schopnost hromadných sad řádků načíst více popisovačů řádků (sada řádků bude typu CBulkRowset
a bude volat SetRows
se zadaným počtem řádků).
Pokud bulk_fetch
je menší než jedna, SetRows
vrátí se nula.
Poznámky
db_command
CCommand
vytvoří objekt, který používá příjemce OLE DB ke spuštění příkazu.
Můžete použít db_command
s oborem třídy nebo funkce. Hlavní rozdíl je obor objektu CCommand
. V rozsahu funkce se data, jako jsou vazby, ukončí na konci funkce. Použití oboru třídy i funkce zahrnuje třídu CCommand<>
šablony příjemce OLE DB , ale argumenty šablony se liší pro případy funkce a třídy. V případě funkce se vazby vytvoří na objekt Accessor
, který se skládá z místních proměnných, zatímco použití třídy odvodí odvozenou CAccessor
třídu jako argument. Při použití jako atribut db_command
třídy spolupracuje s db_column
.
db_command
lze použít ke spouštění příkazů, které nevrací sadu výsledků.
Když zprostředkovatel atributu příjemce použije tento atribut na třídu, kompilátor přejmenuje třídu na _[YourClassName]Accessor
, kde [YourClassName]
je název, který jste dali třídě. Kompilátor také vytvoří třídu s názvem [YourClassName]
, která je odvozena od _[YourClassName]Accessor
. V zobrazení třídy uvidíte obě třídy.
Příklady
Tato ukázka definuje příkaz, který vybere křestní jméno a příjmení z tabulky, ve které sloupec stavu odpovídá certifikační autoritě. db_command
vytvoří a přečte sadu řádků, na které můžete volat funkce generované průvodcem, jako OpenAll
jsou aCloseAll
, a také CRowset
členské funkce, jako MoveNext
jsou .
Tento kód vyžaduje, abyste zadali vlastní připojovací řetězec, které se připojí k pubs
databázi. Informace o tom, jak poskytnout připojovací řetězec ve vývojovém prostředí, najdete v tématu Postupy: Připojení k databázi a procházení existujících objektů a přidání nových připojení.
Zdrojový soubor 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);
}
};
Zdrojový soubor 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();
}
Tato ukázka používá db_source
třídu zdroje CMySource
dat a db_command
třídy příkazů CCommand1
a 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();
}
Požadavky
Kontext atributu | Hodnota |
---|---|
Platí pro | class , , struct člen, metoda, místní |
Opakovatelný | No |
Požadované atributy | Nic |
Neplatné atributy | Nic |
Další informace o kontextech atributů naleznete v tématu Kontexty atributů.