Sdílet prostřednictvím


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_commandCCommand 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 CAccessortří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_commandvytvoří 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 MoveNextjsou .

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

Viz také

Atributy příjemce OLE DB
Samostatné atributy