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 je:
[ db_command ( command = "Select * from Products" ) ]
Syntaxe command
je následující:
vazební blok parametru 1
Příkaz OLE DB
binding parameter block 2
pokračování příkazu OLE DB
vazební blok parametru 3
...
Blok parametru vazby je definován takto:
(
bindtype
szVar1 [,
szVar2 [,
nVar3 [,
...]]])
kde:
(
označí začátek bloku datové vazby.bindtype
je jeden z následujících řetězců, které nerozlišují malá a velká písmena:[db_column]
Vytvoří vazbu každé členské proměnné na sloupec v sadě řádků.[bindto]
(stejné jako[db_column]
).[in]
váže členské proměnné jako vstupní parametry.[out]
váže členské proměnné jako výstupní parametry.[in,out]
Vytvoří vazbu mezi členské proměnné jako vstupní a výstupní parametry.
szVarN, nVarN přeloží na členské proměnné v aktuálním oboru.
)
označí 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ří mapování parametrů.
Pokud řetězec příkazu obsahuje jeden nebo více parametrů, jako [db_column]
je nebo [bindto]
, pak db_command
vygeneruje sadu řádků i mapu příslušenství pro obsluhu těchto vázaných proměnných. Další informace naleznete v tématu db_accessor
.
Poznámka
bindtype
syntaxe bindings
a 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 datových m_au_fname
členů a m_au_lname
na au_fname
sloupce a au_lname
tabulky authors 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
objektem , 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, na který se příkaz spustí. Viz třída db_source
.
db_command
zkontroluje, že proměnná použitá pro source_name
je platná, takže zadaná proměnná by měla být ve funkčním nebo globálním oboru.
hresult
(Volitelné) Identifikuje proměnnou, která obdrží hodnotu HRESULT tohoto databázového příkazu. Pokud proměnná neexistuje, bude automaticky vložena 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 neanalybuje bindtype
parametr. Toto použití umožňuje použít syntaxi zprostředkovatele OLE DB. Pokud chcete zakázat analýzu bez parametrů vazby, zadejte Bindings=""
.
Pokud nezadáte hodnotu pro bindings
, db_command
parsuje blok parametrů vazby. Vyhledá '(
' následované bindtype
v závorkách, následované jednou nebo více dříve deklarovanými proměnnými členů C++, následovanými ')
'. Rozdělí veškerý text mezi závorky z výsledného příkazu. Tyto parametry se používají 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í nulu.
Poznámky
db_command
vytvoří CCommand
objekt, který je používán příjemcem OLE DB ke spuštění příkazu.
Můžete použít db_command
s oborem třídy nebo funkce; hlavním rozdílem je obor objektu CCommand
. U oboru funkce se data, jako jsou vazby, ukončí na konci funkce. Použití třídy i oboru 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 vytvoří vazby na Accessor
objekt, který obsahuje místní proměnné, zatímco použití třídy odvodí jako argument třídu odvozenou CAccessor
od třídy. Při použití jako atribut db_command
třídy funguje společně 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 je název, který [YourClassName]
jste dali třídě. Kompilátor také vytvoří třídu s názvem [YourClassName]
, která je odvozena z _[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, kde sloupec state 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 a CloseAll
, a také CRowset
členské funkce, jako MoveNext
je .
Tento kód vyžaduje, abyste zadali vlastní připojovací řetězec, který se připojuje k pubs
databázi. Informace o tom, jak poskytnout připojovací řetězec ve vývojovém prostředí, najdete v tématech 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 se používá db_source
pro třídu CMySource
zdroje 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í |
Opakovatelnost | No |
Požadované atributy | Žádné |
Neplatné atributy | Žádné |
Další informace o kontextech atributů najdete v tématu Kontexty atributů.