Klasa CCommand
Udostępnia metody ustawiania i wykonywania polecenia.
Składnia
template <class TAccessor = CNoAccessor,
template <typename T> class TRowset = CRowset,
class TMultiple = CNoMultipleResults>
class CCommand :
public CAccessorRowset <TAccessor, TRowset>,
public CCommandBase,
public TMultiple
Parametry
Funkcja TAccessor
Typ klasy dostępu (np CDynamicParameterAccessor
. , CDynamicStringAccessor
lub CEnumeratorAccessor
), który ma być używany przez polecenie . Wartość domyślna to CNoAccessor
, która określa, że klasa nie obsługuje parametrów ani kolumn wyjściowych.
TRowset
Typ klasy zestawu wierszy (np CArrayRowset
. lub CNoRowset
), której chcesz użyć polecenia. Wartość domyślna to CRowset
.
TMultiple
Aby użyć polecenia OLE DB, które może zwrócić wiele wyników, określ CMultipleResults. W przeciwnym razie użyj CNoMultipleResults. Aby uzyskać szczegółowe informacje, zobacz IMultipleResults.
Wymagania
Nagłówek: atldbcli.h
Elementy członkowskie
Metody
Nazwa/nazwisko | opis |
---|---|
Zamknij | Zamyka bieżące polecenie. |
GetNextResult | Pobiera następny wynik podczas korzystania z wielu zestawów wyników. |
Otwórz | Wykonuje polecenie i opcjonalnie wiąże polecenie. |
Metody dziedziczone
Nazwa/nazwisko | opis |
---|---|
Utworzenie | Tworzy nowe polecenie dla określonej sesji, a następnie ustawia tekst polecenia. |
Utwórzpolecenia | Tworzy nowe polecenie. |
GetParameterInfo | Pobiera listę parametrów polecenia, ich nazwy i typy. |
Przygotowywanie | Weryfikuje i optymalizuje bieżące polecenie. |
ReleaseCommand | Zwalnia metodę dostępu parametru w razie potrzeby, a następnie zwalnia polecenie. |
SetParameterInfo | Określa natywny typ każdego parametru polecenia. |
Nieprzygotuj | Odrzuca bieżący plan wykonywania polecenia. |
Uwagi
Użyj tej klasy, gdy musisz wykonać operację opartą na parametrach lub wykonać polecenie. Jeśli wystarczy otworzyć prosty zestaw wierszy, zamiast tego użyj tabeli CTable .
Używana klasa dostępu określa metodę powiązania parametrów i danych.
Należy pamiętać, że nie można używać procedur składowanych z dostawcą OLE DB dla jet, ponieważ ten dostawca nie obsługuje procedur składowanych (tylko stałe są dozwolone w ciągach zapytania).
CCommand::Close
Zwalnia zestaw wierszy dostępu skojarzony z poleceniem .
Składnia
void Close();
Uwagi
Polecenie używa zestawu wierszy, metody dostępu zestawu wyników i (opcjonalnie) metody dostępu parametrów (w przeciwieństwie do tabel, które nie obsługują parametrów i nie wymagają dostępu do parametrów).
Po wykonaniu polecenia należy wywołać zarówno Close
polecenie ReleaseCommand, jak i releaseCommand .
Jeśli chcesz wielokrotnie wykonywać to samo polecenie, należy zwolnić każdą metodę dostępu zestawu wyników, wywołując metodę przed wywołaniem Close
metody Execute
. Na końcu serii należy zwolnić metodę dostępu parametru, wywołując metodę ReleaseCommand
. Innym typowym scenariuszem jest wywołanie procedury składowanej, która ma parametry wyjściowe. W przypadku wielu dostawców (takich jak dostawca OLE DB dla programu SQL Server) wartości parametrów wyjściowych nie będą dostępne, dopóki nie zamkniesz dostępu do zestawu wyników. Wywołaj metodę Close
, aby zamknąć zwrócony zestaw wierszy i metodę dostępu zestawu wyników, ale nie metodę dostępu do parametrów, umożliwiając w ten sposób pobieranie wartości parametrów wyjściowych.
Przykład
W poniższym przykładzie pokazano, jak można wywołać Close
polecenie i ReleaseCommand
po wielokrotnym wykonaniu tego samego polecenia.
void DoCCommandTest()
{
HRESULT hr;
hr = CoInitialize(NULL);
CCustomer rs; // Your CCommand-derived class
rs.m_BillingID = 6611; // Open billing ID 6611
hr = rs.OpenAll(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the first command execution
rs.Close();
rs.m_BillingID = 3333; // Open billing ID 3333 (a new customer)
hr = rs.Open(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the second command execution;
// Instead of the two following lines
// you could simply call rs.CloseAll()
// (a wizard-generated method):
rs.Close();
rs.ReleaseCommand();
CoUninitialize();
}
CCommand::GetNextResult
Pobiera następny zestaw wyników, jeśli jest dostępny.
Składnia
HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
bool bBind = true) throw();
Parametry
pulRowsAffected
[in/out] Wskaźnik do pamięci, w którym zwracana jest liczba wierszy, których dotyczy polecenie.
bBind
[in] Określa, czy po wykonaniu polecenia ma zostać automatycznie powiązane. Wartość domyślna to true
, co powoduje automatyczne wiązanie polecenia. Ustawienie elementu bBind uniemożliwia false
automatyczne powiązanie polecenia, aby można było powiązać je ręcznie. (Powiązanie ręczne jest szczególnie interesujące dla użytkowników OLAP).
Wartość zwracana
Standardowy HRESULT.
Uwagi
Jeśli zestaw wyników został wcześniej pobrany, ta funkcja zwalnia poprzedni zestaw wyników i usuwa powiązanie kolumn. Jeśli parametr bBind ma wartość true
, wiąże nowe kolumny.
Tę funkcję należy wywołać tylko wtedy, gdy określono wiele wyników, ustawiając parametr szablonu CCommand
TMultipleCMultipleResults
=.
CCommand::Open
Wykonuje polecenie i opcjonalnie wiąże polecenie.
Składnia
HRESULT Open(const CSession& session,
LPCWSTR wszCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
LPCSTR szCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
INT szCommand = NULL,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
bool bBind = true,
ULONG ulPropSets = 0) throw();
Parametry
sesja
[in] Sesja, w której ma zostać wykonane polecenie.
wszCommand
[in] Polecenie do wykonania, przekazane jako ciąg Unicode. Może mieć wartość NULL w przypadku użycia polecenia CAccessor
, w którym przypadku polecenie zostanie pobrane z wartości przekazanej do makra DEFINE_COMMAND . Aby uzyskać szczegółowe informacje, zobacz ICommand::Execute w dokumentacji programisty OLE DB.
szCommand
[in] Tak samo jak wszCommand z tą różnicą, że ten parametr przyjmuje ciąg polecenia ANSI. Czwarta forma tej metody może przyjmować wartość NULL. Aby uzyskać szczegółowe informacje, zobacz "Uwagi" w dalszej części tego tematu.
pPropSet
[in] Wskaźnik do tablicy struktur DBPROPSET zawierających właściwości i wartości do ustawienia. Zobacz Zestawy właściwości i grupy właściwości w dokumentacji programisty OLE DB w zestawie Windows SDK.
PRowsAffected
[in/out] Wskaźnik do pamięci, w którym zwracana jest liczba wierszy, których dotyczy polecenie. Jeśli wartość *pRowsAffected ma wartość NULL, liczba wierszy nie jest zwracana. Open
W przeciwnym razie ustawia wartość *pRowsAffected zgodnie z następującymi warunkami:
If | Następnie |
---|---|
Element cParamSets elementu pParams jest większy niż 1 |
*pRowsAffected reprezentuje łączną liczbę wierszy, na które mają wpływ wszystkie zestawy parametrów określone w wykonaniu. |
Liczba wierszy, których dotyczy problem, jest niedostępna | *PRowsAffected ma wartość -1. |
Polecenie nie aktualizuje, usuwa ani wstawia wierszy | *Wpływ pRows jest niezdefiniowany. |
guidCommand
[in] Identyfikator GUID określający składnię i ogólne reguły dla dostawcy do użycia w analizowaniu tekstu polecenia. Aby uzyskać szczegółowe informacje, zobacz ICommandText::GetCommandText i ICommandText::SetCommandText w dokumentacji programisty OLE DB.
bBind
[in] Określa, czy po wykonaniu polecenia ma zostać automatycznie powiązane. Wartość domyślna to true
, co powoduje automatyczne wiązanie polecenia. Ustawienie elementu bBind uniemożliwia false
automatyczne powiązanie polecenia, aby można było powiązać je ręcznie. (Powiązanie ręczne jest szczególnie interesujące dla użytkowników OLAP).
ulPropSets
[in] Liczba struktur DBPROPSET przekazanych w argumencie pPropSet .
Wartość zwracana
Standardowy HRESULT.
Uwagi
Pierwsze trzy formularze wykonywania sesji, tworzenia polecenia i wykonywania polecenia, wiązania dowolnych Open
parametrów w razie potrzeby.
Pierwsza forma Open
przyjmuje ciąg polecenia Unicode i nie ma wartości domyślnej.
Druga forma Open
przyjmuje ciąg polecenia ANSI i nie ma wartości domyślnej (podanej w celu zapewnienia zgodności z poprzednimi wersjami z istniejącymi aplikacjami ANSI).
Trzecia forma polecenia Open
umożliwia ciągowi polecenia wartość NULL ze względu na typ int
z wartością domyślną null. Jest on udostępniany do wywoływania Open(session, NULL);
lub Open(session);
, ponieważ wartość NULL jest typu int
. Ta wersja wymaga i potwierdza, że int
parametr ma wartość NULL.
Użyj czwartej Open
formy polecenia , jeśli utworzono już polecenie i chcesz wykonać pojedyncze wykonanie i wiele wykonań.
Uwaga
Open
wywołuje metodę Execute
, która z kolei wywołuje metodę GetNextResult
.
CCommand::Create
Wywołuje polecenie CCommand::CreateCommand , aby utworzyć polecenie dla określonej sesji, a następnie wywołuje metodę ICommandText::SetCommandText , aby określić tekst polecenia.
Składnia
HRESULT CCommandBase::Create(const CSession& session,
LPCWSTR wszCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
HRESULT CCommandBase::Create(const CSession& session,
LPCSTR szCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
Parametry
sesja
[in] Sesja, na której ma zostać utworzone polecenie .
wszCommand
[in] Wskaźnik do tekstu Unicode ciągu polecenia.
szCommand
[in] Wskaźnik do tekstu ANSI ciągu polecenia.
guidCommand
[in] Identyfikator GUID określający składnię i ogólne reguły dla dostawcy do użycia w analizowaniu tekstu polecenia. Aby uzyskać opis dialektów, zobacz ICommandText::GetCommandText w dokumentacji programisty OLE DB.
Wartość zwracana
Standardowy HRESULT.
Uwagi
Pierwsza forma Create
przyjmuje ciąg polecenia Unicode. Druga forma Create
przyjmuje ciąg polecenia ANSI (zapewnia zgodność z poprzednimi wersjami z istniejącymi aplikacjami ANSI).
CCommand::CreateCommand
Tworzy nowe polecenie.
Składnia
HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();
Parametry
sesja
[in] Obiekt CSession
, który ma być skojarzony z nowym poleceniem.
Wartość zwracana
Standardowy HRESULT.
Uwagi
Ta metoda tworzy polecenie przy użyciu określonego obiektu sesji.
CCommand::GetParameterInfo
Pobiera listę parametrów polecenia, ich nazwy i typy.
Składnia
HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,
DBPARAMINFO** ppParamInfo,
OLECHAR** ppNamesBuffer) throw ();
Parametry
Zobacz ICommandWithParameters::GetParameterInfo w dokumentacji programisty OLE DB.
Wartość zwracana
Standardowy HRESULT.
CCommand::Prepare
Weryfikuje i optymalizuje bieżące polecenie.
Składnia
HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();
Parametry
cExpectedRuns
[in] Liczba oczekiwanych wykonań polecenia.
Wartość zwracana
Standardowy HRESULT.
Uwagi
Ta metoda opakowuje metodę OLE DB ICommandPrepare::P repare.
CCommand::ReleaseCommand
Zwalnia metodę dostępu parametru, a następnie zwalnia samo polecenie.
Składnia
void CCommandBase::ReleaseCommand() throw();
Uwagi
ReleaseCommand
jest używany w połączeniu z Close
. Aby uzyskać szczegółowe informacje o użyciu, zobacz Zamknij .
CCommand::SetParameterInfo
Określa natywny typ każdego parametru polecenia.
Składnia
HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
const DBORDINAL* pOrdinals,
const DBPARAMBINDINFO* pParamInfo) throw();
Parametry
Zobacz ICommandWithParameters::SetParameterInfo w dokumentacji programisty OLE DB.
Wartość zwracana
Standardowy HRESULT.
CCommand::Unprepare
Odrzuca bieżący plan wykonywania polecenia.
Składnia
HRESULT CCommandBase::Unprepare() throw();
Wartość zwracana
Standardowy HRESULT.
Uwagi
Ta metoda opakowuje metodę OLE DB ICommandPrepare::Unprepare.
Zobacz też
Szablony konsumentów OLE DB
Szablony konsumentów OLE DB — dokumentacja