db_command

Erstellt einen OLE DB-Befehl.

Syntax

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

Parameter

command
Eine Befehlszeichenfolge, die den Text eines OLE DB-Befehls enthält. Ein einfaches Beispiel lautet:

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

Die Befehlssyntax lautet wie folgt:

Bindungsparameterblock 1
  OLE DB Befehl
Bindungsparameterblock 2
  Fortsetzung des OLE DB Befehls
Bindungsparameterblock 3
...

binding parameter block ist folgendermaßen definiert:

([bindtype]szVar1 [, szVar2 [, nVar3 [, ...]]] )

Dabei gilt Folgendes:

  • ( kennzeichnet den Anfang des Datenbindungsblocks.

  • [bindtype] ist eine der folgenden Zeichenfolgen, bei der die Groß-/Kleinschreibung nicht beachtet wird:

    • [db_column] bindet die einzelnen Membervariablen an eine Spalte in einem Rowset.

    • [bindto] (identisch mit [db_column]).

    • [in] bindet Membervariablen als Eingabeparameter.

    • [out] bindet Membervariablen als Ausgabeparameter.

    • [in,out] bindet Membervariablen als Ein-/Ausgabeparameter.

  • szVarX, nVarX wird in eine Membervariable innerhalb des aktuellen Bereichs auflösen.

  • ) kennzeichnet das Ende des Datenbindungsblocks.

Enthält die Befehlszeichenfolge einen oder mehrere Bezeichner wie [in], [out] oder [in/out], erstellt db_command eine Parameterzuordnung.

Enthält die Befehlszeichenfolge mindestens ein Parameter wie z.B. [db_column] oder [bindto], generiert db_command ein Rowset und eine Accessorkarte, um diese gebundenen Variablen zu bedienen. Weitere Informationen finden Sie unter db_accessor .

Hinweis

[bindtype] syntax and the bindings parameter are not valid when using db_command at the class level.

Nachfolgend finden Sie einige Beispiele für „binding parameter block“. Im folgenden Beispiel werden die Datenmember m_au_fname und m_au_lname jeweils an die Spalten au_fname und au_lname der Autorentabelle in der pubs-Datenbank gebunden:

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
(Optional) Der Name des Handles, das Sie zum Arbeiten mit dem Rowset verwenden. Wenn Sie nameangeben, generiert db_command eine Klasse mit dem angegebenen Namen, das verwendet werden kann, um das Rowset zu traversieren oder mehrere Aktionsabfragen auszuführen. Wenn Sie namenicht angeben, ist es nicht möglich, mehr als eine Zeile mit Ergebnissen an den Benutzer zurückzugeben.

source_name
(Optional) Die CSession Variable oder Instanz einer Klasse, auf db_source die bzw. die das Attribut angewendet wurde, für die der Befehl ausgeführt wird. Informationen hierzu finden Sie unter db_source.

db_command stellt sicher, dass die Variable für source_name gültig ist, um den Gültigkeitsbereich der angegebenen Variablen auf eine Funktion oder als global festzulegen.

Hresult
(Optional) Identifiziert die Variable, die das HRESULT dieses Datenbankbefehls erhält. Wenn die Variable nicht existiert, wird sie automatisch durch das Attribut eingefügt.

Bindungen
(Optional) Ermöglicht es Ihnen, die Bindungsparameter vom Befehl OLE DB trennen.

Wenn Sie einen Wert für Bindungen angeben, analysiert db_command den zugeordneten Wert und analysiert den [bindtype]-Parameter nicht. Dies ermöglicht Ihnen die Verwendung der OLE DB-Anbietersyntax. Um die Analyse ohne Bindungsparameter zu deaktivieren, geben Sie an Bindings="".

Wenn Sie keinen Wert für Bindungen angeben, analysiert db_command den Bindungsparameterblock und sucht nach "(", gefolgt von [bindtype] in Klammern, gefolgt von einer oder mehr zuvor deklarierten C++-Membervariablen, gefolgt von ")". Der in Klammern gefasste Text wird aus dem sich ergebenden Befehl entfernt, und diese Parameter werden verwendet, um die Spalten- und Parameterbindungen für diesen Befehl zu erstellen.

bulk_fetch
(Optional) Ein ganzzahliger Wert, der die Anzahl der abgerufenen Zeilen angibt.

Mit dem Standardwert 1 werden die Zeilen einzeln abgerufen (das Rowset ist vom Typ CRowset).

Ein höherer Wert als 1 gibt das Massenabrufen von Zeilen an. Das Massenabrufen von Zeilen bezieht sich auf die Fähigkeit von Massenrowsets, mehrere Zeilenhandles abzurufen (das Rowset ist vom Typ CBulkRowset und wird SetRows mit der angegebenen Anzahl von Zeilen aufrufen).

Wenn bulk_fetch kleiner als 1 ist, gibt SetRows 0 (Null) zurück.

Bemerkungen

db_command erstellt ein CCommand -Objekt, das von einem OLE DB-Consumer verwendet wird, um einen Befehl auszuführen.

Sie können db_command entweder mit einem Klassen- oder Funktionsbereich verwenden. Der Hauptunterschied liegt im Bereich des CCommand -Objekts. Ist der Gültigkeitsbereich auf die Funktion beschränkt, werden Daten wie z.B. Bindungen bei Beendigung der Funktion ebenfalls beendet. Sowohl klassen- als auch funktionsumfangsverwendungen umfassen die OLE DB Consumer Template-Klasse CCommand<>, aber die Vorlagenargumente unterscheiden sich für die Funktions- und Klassenfälle. Im Funktionsfall werden Bindungen an eine -Klasse vorgenommen, Accessor die lokale Variablen umfasst, CAccessorwährend die Klassenverwendung eine von abgeleitete Klasse als Argument hergeleitet. Wenn es als Klassenattribut verwendet wird, funktioniert db_command zusammen mit db_column.

Mitdb_command können Befehle ausgeführt werden, die kein Resultset zurückgeben.

Wenn der Consumerattributanbieter dieses Attribut auf eine Klasse annimmt, benennt der Compiler die Klasse in _YourClassNameAccessor um, wobei YourClassName der Name ist, den Sie der Klasse gegeben haben, und der Compiler erstellt auch eine Klasse namens YourClassName, die von _YourClassNameAccessor ableiten wird. In dieser Klassenansicht werden beide Klassen angezeigt.

Beispiele

In diesem Beispiel wird ein Befehl definiert, der die Vor- und Nachnamen aus einer Tabelle auswählt, in der die Statusspalte „CA“ entspricht. db_command erstellt und liest ein Rowset, für das Sie sowohl über den Assistenten generierte Funktionen wie OpenAll und CloseAllals auch CRowset -Memberfunktionen wie MoveNextausführen können.

Beachten Sie, dass Sie für diesen Code eine eigene Verbindungszeichenfolge bereitstellen müssen, die eine Verbindung mit der pubs-Datenbank herstellt. Informationen dazu, wie Sie dies in der Entwicklungsumgebung tun, finden Sie unter How to: Verbinden to a Database and Browse Existing Objects und Add new connections ( How to: Verbinden to a Database (Erstellen einer Datenbank) und Browse Existing Objects (Vorhandene Objekte durchsuchen) und Add new connections (Neue Verbindungen hinzufügen).

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

In diesem Beispiel wird db_source auf die Datenquellenklasse CMySourceangewendet und db_command auf die Befehlsklassen CCommand1 und 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();
}

Anforderungen

Attributkontext Wert
Zielgruppe class, struct, Member, Methode, lokal
Wiederholbare No
Erforderliche Attribute Keine
Ungültige Attribute Keine

Weitere Informationen zu den Attributkontexten finden Sie unter Attributkontexte.

Siehe auch

OLE DB Consumerattribute
Eigenständige Attribute