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:

(bindtypeszVar1 [,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 nameobjektem , 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 CAccessorod 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 MoveNextje .

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 CMySourcezdroje 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ů.

Viz také

Atributy příjemce technologie OLE DB
Samostatné atributy