db_command

Tworzy polecenie OLE DB.

Składnia

[ db_command(command, name, source_name, hresult, bindings, bulk_fetch) ]

Parametry

command
Ciąg polecenia zawierający tekst polecenia OLE DB. Prostym przykładem jest:

[ db_command ( command = "Select * from Products" ) ]

Składnia command jest następująca:

blok parametru powiązania 1
  Polecenie OLE DB
blok parametru powiązania 2
  kontynuacja polecenia OLE DB
blok parametru powiązania 3
...

Blok parametrów powiązania jest definiowany w następujący sposób:

(bindtypeszVar1 [,szVar2 [,nVar3 [, ...]]])

gdzie:

  • ( oznacza początek bloku powiązania danych.

  • bindtype jest jednym z następujących ciągów bez uwzględniania wielkości liter:

    • [db_column] Tworzy powiązanie każdej ze zmiennych składowych z kolumną w zestawie wierszy.

    • [bindto] (takie same jak [db_column]).

    • [in] wiąże zmienne składowe jako parametry wejściowe.

    • [out] wiąże zmienne składowe jako parametry wyjściowe.

    • [in,out] wiąże zmienne członkowskie jako parametry wejściowe/wyjściowe.

  • szVarN, nVarN rozpoznawać zmienne składowe w bieżącym zakresie.

  • ) oznacza koniec bloku powiązania danych.

Jeśli ciąg polecenia zawiera co najmniej jeden specyfikator, taki jak [in], [out]lub [in/out], db_command tworzy mapę parametrów.

Jeśli ciąg polecenia zawiera co najmniej jeden parametr, taki jak lub [bindto], db_command generuje zarówno zestaw wierszy, jak [db_column] i mapę dostępu do obsługi tych powiązanych zmiennych. W celu uzyskania więcej informacji, zobacz następujący temat: db_accessor.

Uwaga

bindtype składnia bindings i parametr są nieprawidłowe w przypadku używania db_command na poziomie klasy.

Oto kilka przykładów bloków parametrów powiązania. W poniższym przykładzie elementy członkowskie danych i są powiązane m_au_fname odpowiednio z au_fname kolumnami i au_lname tabeli autorzy w pubs bazie m_au_lname danych:

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
(Opcjonalnie) Nazwa uchwytu używanego do pracy z zestawem wierszy. Jeśli określisz namewartość , db_command generuje klasę z określonym nameelementem , która może służyć do przechodzenia przez zestaw wierszy lub wykonywania wielu zapytań akcji. Jeśli nie określisz nameparametru , nie będzie można zwrócić użytkownikowi więcej niż jednego wiersza wyników.

source_name
(Opcjonalnie) Zmienna CSession lub wystąpienie klasy, która ma db_source zastosowany atrybut, na którym jest wykonywane polecenie. Zobacz: db_source.

db_command sprawdza, czy zmienna używana dla source_name elementu jest prawidłowa, więc określona zmienna powinna być w zakresie funkcji lub globalnym.

hresult
(Opcjonalnie) Identyfikuje zmienną, która otrzyma hrESULT tego polecenia bazy danych. Jeśli zmienna nie istnieje, zostanie ona automatycznie wstrzyknięta przez atrybut .

bindings
(Opcjonalnie) Umożliwia oddzielenie parametrów powiązania od polecenia OLE DB.

Jeśli określisz wartość parametru bindings, db_command analizuje skojarzona wartość i nie analizuje parametru bindtype . To użycie umożliwia użycie składni dostawcy OLE DB. Aby wyłączyć analizowanie bez parametrów powiązania, określ wartość Bindings="".

Jeśli nie określisz wartości parametru bindings, db_command analizuje blok parametrów powiązania. Szuka( "", a następnie bindtype nawiasów kwadratowych, po którym następuje co najmniej jedna wcześniej zadeklarowana zmienna składowa języka C++, a następnie ")". Usuwa cały tekst między nawiasami z wynikowego polecenia. Te parametry służą do konstruowania powiązań kolumn i parametrów dla tego polecenia.

bulk_fetch
(Opcjonalnie) Wartość całkowita określająca liczbę wierszy do pobrania.

Wartość domyślna to 1, która określa pobieranie pojedynczego wiersza (zestaw wierszy będzie mieć typ CRowset).

Wartość większa niż 1 określa pobieranie wierszy zbiorczych. Zbiorcze pobieranie wierszy odnosi się do możliwości pobierania wielu dojść wierszy zbiorczych (zestaw wierszy będzie CBulkRowset typu i będzie wywoływany SetRows z określoną liczbą wierszy).

Jeśli bulk_fetch wartość jest mniejsza niż jedna, SetRows funkcja zwróci zero.

Uwagi

db_command tworzy CCommand obiekt, który jest używany przez użytkownika OLE DB do wykonania polecenia.

Można użyć db_command z zakresem klasy lub funkcji; główną różnicą jest zakres CCommand obiektu. W przypadku zakresu funkcji dane, takie jak powiązania, kończą się na końcu funkcji. Zarówno użycie klas, jak i zakresu funkcji obejmuje klasę CCommand<>szablonu użytkownika OLE DB, ale argumenty szablonu różnią się w przypadku przypadków funkcji i klas. W przypadku funkcji powiązania zostaną wprowadzone do zmiennej Accessor lokalnej, a użycie klasy wywnioskuje klasę pochodną CAccessorjako argument. Gdy jest używany jako atrybut klasy, db_command współpracuje z elementem db_column.

db_command Może służyć do wykonywania poleceń, które nie zwracają zestawu wyników.

Gdy dostawca atrybutów konsumenta stosuje ten atrybut do klasy, kompilator zmienia nazwę klasy na _[YourClassName]Accessor, gdzie [YourClassName] jest nazwą nadaną klasie. Kompilator tworzy również klasę o nazwie [YourClassName], która pochodzi z klasy _[YourClassName]Accessor. W widoku klasy zobaczysz obie klasy.

Przykłady

W tym przykładzie zdefiniowano polecenie, które wybiera imię i nazwisko z tabeli, w której kolumna stanu jest zgodna z "CA". db_command Tworzy i odczytuje zestaw wierszy, na którym można wywoływać funkcje generowane przez kreatora, takie jak OpenAll i CloseAll, oraz CRowset funkcje składowe, takie jak MoveNext.

Ten kod wymaga podania własnych parametry połączenia łączących się z bazą pubs danych. Aby uzyskać informacje o sposobie udostępniania parametry połączenia w środowisku deweloperów, zobacz Instrukcje: Połączenie do bazy danych i przeglądanie istniejących obiektów i Dodawanie nowych połączeń.

Plik db_command.hźródłowy:

// 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);
   }
};

Plik db_command.cppźródłowy:

// 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();
}

W tym przykładzie użyto db_source klasy CMySourceźródła danych oraz db_command klas CCommand1 poleceń i 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();
}

Wymagania

Kontekst atrybutu Wartość
Dotyczy class, structelement członkowski, metoda, lokalna
Powtarzalne Nie.
Wymagane atrybuty None
Nieprawidłowe atrybuty None

Aby uzyskać więcej informacji na temat kontekstów atrybutów, zobacz Konteksty atrybutów.

Zobacz też

Atrybuty konsumenta OLE DB
Atrybuty autonomiczne