CCommand-Klasse
Stellt Methoden zum Festlegen und Ausführen eines Befehls bereit.
Syntax
template <class TAccessor = CNoAccessor,
template <typename T> class TRowset = CRowset,
class TMultiple = CNoMultipleResults>
class CCommand :
public CAccessorRowset <TAccessor, TRowset>,
public CCommandBase,
public TMultiple
Parameter
TAccessor
Der Typ der Accessorklasse (z CDynamicParameterAccessor
. B. , CDynamicStringAccessor
oder CEnumeratorAccessor
), die der Befehl verwenden soll. Der Standardwert ist CNoAccessor
, der angibt, dass die Klasse parameter oder Ausgabespalten nicht unterstützt.
TRowset
Der Typ der Rowset-Klasse (z CArrayRowset
. B. oder CNoRowset
), die der Befehl verwenden soll. Der Standardwert ist CRowset
.
TMultiple
Wenn Sie einen OLE DB-Befehl verwenden möchten, der mehrere Ergebnisse zurückgeben kann, geben Sie CMultipleResults an. Verwenden Sie andernfalls CNoMultipleResults. Weitere Informationen finden Sie unter "IMultipleResults".
Anforderungen
Header: atldbcli.h
Member
Methoden
Name | Beschreibung |
---|---|
Abschließen | Schließt den aktuellen Befehl. |
GetNextResult | Ruft das nächste Ergebnis ab, wenn mehrere Resultsets verwendet werden. |
Offen | Führt den Befehl aus und bindet den Befehl optional. |
Geerbte Methoden
Name | Beschreibung |
---|---|
Erstellen | Erstellt einen neuen Befehl für die angegebene Sitzung und legt dann den Befehlstext fest. |
CreateCommand | Erstellt einen neuen Befehl. |
GetParameterInfo | Ruft eine Liste der Parameter des Befehls, deren Namen und deren Typen ab. |
Vorbereiten | Überprüft und optimiert den aktuellen Befehl. |
ReleaseCommand | Gibt den Parameteraccessor bei Bedarf frei, und gibt dann den Befehl frei. |
SetParameterInfo | Gibt den systemeigenen Typ der einzelnen Befehlsparameter an. |
Nicht vorbereitet | Verwirft den aktuellen Befehlsausführungsplan. |
Hinweise
Verwenden Sie diese Klasse, wenn Sie einen parameterbasierten Vorgang ausführen oder einen Befehl ausführen müssen. Wenn Sie lediglich ein einfaches Rowset öffnen müssen, verwenden Sie stattdessen CTable .
Die verwendete Accessorklasse bestimmt die Methode der Bindungsparameter und -daten.
Beachten Sie, dass Sie gespeicherte Prozeduren nicht mit dem OLE DB-Anbieter für Jet verwenden können, da dieser Anbieter gespeicherte Prozeduren nicht unterstützt (nur Konstanten sind in Abfragezeichenfolgen zulässig).
CCommand::Close
Gibt das dem Befehl zugeordnete Accessor-Rowset frei.
Syntax
void Close();
Hinweise
Ein Befehl verwendet ein Rowset, einen Resultset-Accessor und (optional) einen Parameteraccessor (im Gegensatz zu Tabellen, die Parameter nicht unterstützen und keinen Parameteraccessor benötigen).
Wenn Sie einen Befehl ausführen, sollten Sie beide Close
und ReleaseCommand nach dem Befehl aufrufen.
Wenn Sie denselben Befehl wiederholt ausführen möchten, sollten Sie jeden Resultset-Accessor freigeben, indem Sie vor dem Aufrufen aufrufen Close
Execute
. Am Ende der Datenreihe sollten Sie den Parameteraccessor durch Aufrufen ReleaseCommand
freigeben. Ein weiteres gängiges Szenario ist das Aufrufen einer gespeicherten Prozedur mit Ausgabeparametern. Auf vielen Anbietern (z. B. dem OLE DB-Anbieter für SQL Server) kann erst auf die Ausgabeparameterwerte zugegriffen werden, wenn Sie den Resultset-Accessor schließen. Rufen Sie Close
auf, um das zurückgegebene Rowset und den Resultset-Accessor zu schließen, aber nicht den Parameteraccessor, sodass Sie die Ausgabeparameterwerte abrufen können.
Beispiel
Das folgende Beispiel zeigt, wie Sie Close
und ReleaseCommand
aufrufen, wenn Sie wiederholt den gleichen Befehl ausführen.
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
Ruft das nächste Resultset ab, wenn eins verfügbar ist.
Syntax
HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
bool bBind = true) throw();
Parameter
Betroffene pulRows
[in/out] Ein Zeiger auf den Arbeitsspeicher, in dem die Anzahl von Zeilen zurückgegeben wird, die von einem Befehl betroffen sind.
bBind
[in] Gibt an, ob der Befehl nach der Ausführung automatisch gebunden werden soll. Der Standardwert ist true
, was bewirkt, dass der Befehl automatisch gebunden wird. Durch Festlegen von "bBind " wird false
die automatische Bindung des Befehls verhindert, sodass Sie manuell binden können. (Manuelle Bindung ist für OLAP-Benutzer von besonderem Interesse.)
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Wenn zuvor ein Resultset abgerufen wurde, gibt diese Funktion den vorherigen Resultset frei und bindet die Spalten. Wenn bBind lautet true
, bindet sie die neuen Spalten.
Sie sollten diese Funktion nur aufrufen, wenn Sie mehrere Ergebnisse angegeben haben, indem Sie den CCommand
Vorlagenparameter TMultiple=CMultipleResults
festlegen.
CCommand::Open
Führt den Befehl aus und bindet den Befehl optional.
Syntax
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();
Parameter
Sitzungskonsistenz
[in] Die Sitzung, in der der Befehl ausgeführt werden soll.
wszCommand
[in] Der auszuführende Befehl, der als Unicode-Zeichenfolge übergeben wird. Kann bei Verwendung CAccessor
NULL sein, in diesem Fall wird der Befehl aus dem wert abgerufen, der an das DEFINE_COMMAND Makro übergeben wird. Weitere Informationen finden Sie unter "ICommand::Execute " in der OLE DB-Programmierreferenz .
szCommand
[in] Identisch mit wszCommand , außer dass dieser Parameter eine ANSI-Befehlszeichenfolge verwendet. Die vierte Form dieser Methode kann einen NULL-Wert annehmen. Ausführliche Informationen finden Sie weiter unten in diesem Thema unter "Hinweise".
pPropSet
[in] Ein Zeiger auf ein Array von DBPROPSET-Strukturen , die Eigenschaften und Werte enthalten, die festgelegt werden sollen. Siehe Eigenschaftensätze und Eigenschaftengruppen in der OLE DB-Programmierreferenz im Windows SDK.
pRowsAffected
[in/out] Ein Zeiger auf den Arbeitsspeicher, in dem die Anzahl von Zeilen zurückgegeben wird, die von einem Befehl betroffen sind. Wenn *pRowsAffected NULL ist, wird keine Zeilenanzahl zurückgegeben. Open
Andernfalls wird *pRowsAffected entsprechend den folgenden Bedingungen festgelegt:
Wenn | Then |
---|---|
Das cParamSets Element von pParams ist größer als 1 |
*pRowsAffected stellt die Gesamtanzahl der Zeilen dar, die von allen in der Ausführung angegebenen Parametersätzen betroffen sind. |
Die Anzahl der betroffenen Zeilen ist nicht verfügbar. | *pRowsAffected ist auf -1 festgelegt. |
Der Befehl aktualisiert, löscht oder fügt keine Zeilen ein. | *pRowsAffected ist nicht definiert. |
guidCommand
[in] Eine GUID, die die Syntax und allgemeine Regeln für den Anbieter angibt, die beim Analysieren des Befehlstexts verwendet werden sollen. Weitere Informationen finden Sie unter "ICommandText::GetCommandText " und "ICommandText::SetCommandText " in der OLE DB-Programmierreferenz .
bBind
[in] Gibt an, ob der Befehl nach der Ausführung automatisch gebunden werden soll. Der Standardwert ist true
, was bewirkt, dass der Befehl automatisch gebunden wird. Durch Festlegen von "bBind " wird false
die automatische Bindung des Befehls verhindert, sodass Sie manuell binden können. (Manuelle Bindung ist für OLAP-Benutzer von besonderem Interesse.)
ulPropSets
[in] Die Anzahl der im pPropSet-Argument übergebenen DBPROPSET-Strukturen.
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Die ersten drei Formen der Open
Sitzung erstellen, einen Befehl erstellen und den Befehl ausführen, um alle Parameter nach Bedarf zu binden.
Die erste Form einer Open
Unicode-Befehlszeichenfolge und hat keinen Standardwert.
Die zweite Form von Open
akzeptiert eine ANSI-Befehlszeichenfolge und keinen Standardwert (aus Gründen der Abwärtskompatibilität mit vorhandenen ANSI-Anwendungen).
Mit der dritten Form Open
kann die Befehlszeichenfolge NULL sein, da der Typ int
einen Standardwert von NULL aufweist. Es wird zum Aufrufen Open(session, NULL);
bereitgestellt oder Open(session);
weil NULL vom Typ int
ist. Diese Version erfordert und bestätigt, dass der int
Parameter NULL ist.
Verwenden Sie die vierte Form, Open
wenn Sie bereits einen Befehl erstellt haben und eine einzelne Vorbereitung und mehrere Ausführungen ausführen möchten.
Hinweis
Open
Aufrufe Execute
, die wiederum Anrufe GetNextResult
.
CCommand::Create
Ruft CCommand::CreateCommand auf, um einen Befehl für die angegebene Sitzung zu erstellen, und ruft dann ICommandText::SetCommandText auf, um den Befehlstext anzugeben.
Syntax
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 ();
Parameter
Sitzungskonsistenz
[in] Eine Sitzung, in der der Befehl erstellt werden soll.
wszCommand
[in] Ein Zeiger auf den Unicode-Text der Befehlszeichenfolge.
szCommand
[in] Ein Zeiger auf den ANSI-Text der Befehlszeichenfolge.
guidCommand
[in] Eine GUID, die die Syntax und allgemeine Regeln für den Anbieter angibt, die beim Analysieren des Befehlstexts verwendet werden sollen. Eine Beschreibung der Dialekte finden Sie unter "ICommandText::GetCommandText " in der OLE DB-Programmierreferenz.
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Die erste Form der Zeichenfolge für Create
Unicode-Befehle. Die zweite Form der Create
AnSI-Befehlszeichenfolge (die aus Gründen der Abwärtskompatibilität mit vorhandenen ANSI-Anwendungen bereitgestellt wird).
CCommand::CreateCommand
Erstellt einen neuen Befehl.
Syntax
HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();
Parameter
Sitzungskonsistenz
[in] Ein CSession
Objekt, das dem neuen Befehl zugeordnet werden soll.
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Diese Methode erstellt einen Befehl mithilfe des angegebenen Sitzungsobjekts.
CCommand::GetParameterInfo
Ruft eine Liste der Parameter des Befehls, deren Namen und deren Typen ab.
Syntax
HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,
DBPARAMINFO** ppParamInfo,
OLECHAR** ppNamesBuffer) throw ();
Parameter
Siehe "ICommandWithParameters::GetParameterInfo " in der OLE DB-Programmierreferenz.
Rückgabewert
Ein Standard-HRESULT.
CCommand::Prepare
Überprüft und optimiert den aktuellen Befehl.
Syntax
HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();
Parameter
cExpectedRuns
[in] Die Häufigkeit, mit der Sie den Befehl ausführen möchten.
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Diese Methode umschließt die OLE DB-Methode ICommandPrepare::P repare.
CCommand::ReleaseCommand
Gibt den Parameteraccessor frei und gibt dann den Befehl selbst frei.
Syntax
void CCommandBase::ReleaseCommand() throw();
Hinweise
ReleaseCommand
wird in Verbindung mit Close
. Weitere Informationen finden Sie unter "Schließen ".
CCommand::SetParameterInfo
Gibt den systemeigenen Typ der einzelnen Befehlsparameter an.
Syntax
HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
const DBORDINAL* pOrdinals,
const DBPARAMBINDINFO* pParamInfo) throw();
Parameter
Siehe "ICommandWithParameters::SetParameterInfo " in der OLE DB-Programmierreferenz.
Rückgabewert
Ein Standard-HRESULT.
CCommand::Unprepare
Verwirft den aktuellen Befehlsausführungsplan.
Syntax
HRESULT CCommandBase::Unprepare() throw();
Rückgabewert
Ein Standard-HRESULT.
Hinweise
Diese Methode umschließt die OLE DB-Methode ICommandPrepare::Unprepare.
Siehe auch
OLE DB-Consumervorlagen
Referenz der OLE DB-Consumervorlagen