Share via


db_command

Erstellt einen OLE DB-Befehl.

[ 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 ist:

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

    Die Befehlssyntax lautet wie folgt:

    binding parameter block 1
       OLE DB command
    binding parameter block 2
       continuation of OLE DB command
    binding parameter block 3
    ...
    

    Ein Bindungsparameterblock wird wie folgt definiert:

    ([bindtype**]**szVar1 [, szVar2 [, nVar3 [,…] )]]

    Dabei gilt:

    ( Datenbindung kennzeichnet den Beginn des blocks.

    [bindtype] ist eine der folgenden Zeichenfolgen ohne Beachtung der Groß- und Kleinschreibung:

    • [db_column] bindet alle Membervariablen für eine Spalte in einem Rowset.

    • [bindto] identisch ( [db_column]).

    • [in] bindet Membervariablen als Eingabeparameter.

    • [out] bindet Membervariablen als Ausgabeparameter.

    • [in, out] bindet Membervariablen als Eingabe/Ausgabe-Parameter.

    SzVarX wird eine Membervariable innerhalb des aktuellen Bereichs auf.

    ) kennzeichnet das Ende des DataBindings blocks.

    Wenn die Befehlszeichenfolge einen oder mehrere Bezeichner wie [in] [out]Parameter erstellt eine oder [in/out] db_command zugeordnet.

    Wenn die Befehlszeichenfolge einen oder mehrere Parameter db_column z. B. [] oder [bindto] enthält, generiert db_command ein Rowset und eine Accessor, um die gebundenen Variablen zugeordnet zu verarbeiten.Weitere Informationen finden Sie unter db_accessor .

    HinweisHinweis

    [bindtype] Syntax und der bindings-Parameter sind ungültig, wenn sie db_command auf Klassenebene verwenden.

    Im Folgenden finden Sie einige Beispiele für Bindungsparameterblöcken.Das folgende Beispiel umschließt die m_au_fname und m_au_lname den Datenmember und au_fname Spalten au_lname jeweils der Tabelle Authors in der Datenbank Pubs:

    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 verwenden, um mit dem Rowset zu bearbeiten.Wenn Sie Namenangeben, generiert db_command eine Klasse mit dem angegebenen Namen, der verwendet werden kann, um das Rowset zu durchlaufen oder Abfragen mehrerer Aktion auszuführen.Wenn Sie keinen Namenangeben, ist es nicht möglich, mehrere Zeilen mit Ergebnissen an den Benutzer zurückzugeben.

  • source_name (optional)
    Die CSession-Variable oder eine Instanz einer Klasse, die das db_source darauf angewendeten Attribut enthält, auf dem der Befehl ausgeführt wird, oder legt diesen fest.Weitere Informationen finden Sie unter db_source.

    db_command Überprüfungen sichergestellt werden, dass die Variable, die für source_name verwendet wird, gültig ist, sodass die angegebene Variable sollten in der Funktion oder im globalen Gültigkeitsbereich befinden.

  • hresult (optional)
    Identifiziert die Variable, die HRESULT dieses Befehls Datenbank erhält.Wenn die Variable nicht vorhanden ist, wird sie automatisch vom Attribut eingefügt.

  • Bindungen (optional)
    Ermöglicht es Ihnen, die vom OLE DB-Befehl Bindungsparameter zu trennen.

    Wenn Sie einen Wert für bindingsangeben, analysiert db_command den zugeordneten Wert nicht analysiert undbindtype[] - Parameter.Diese Verwendung ermöglicht Ihnen die Verwendung OLE DB-Anbieter-Syntax.Zur Analyse, ohne Bindungsparameter zu deaktivieren, geben Sie **Bindings=""**an.

    Wenn Sie keinen Wert für bindingsangeben, analysiert db_command den Bindungsparameterblock und „sucht nach**(**“, gefolgt von [bindtype] in eckige Klammern gefolgt von einem oder mehreren zuvor deklarierten C++-Membervariablen, gefolgt von ".“)Der gesamte Text zwischen den Klammern wird aus dem resultierenden Befehl entfernt. Diese Parameter werden verwendet, um Spalten- und Parameter Befehlsbindungen für diesen Befehl zu erstellen.

  • bulk_fetch(optional)
    Ein ganzzahliger Wert, der die Anzahl der Zeilen festgelegt, der abgerufen werden soll.

    Der Standardwert ist 1, das das einzelne Zeilen angibt (das Rowset abrufen ist vom Typ CRowset).

    Ein Wert, der größer als 1 (null) ist, gibt das gesammelte Abrufen von Zeilen an.Gesammeltes Abrufen von Zeilen verweist die Möglichkeit, mehrere Rowsets Großteil der Zeilenhandles abrufen (das Rowset ist vom Typ CBulkRowset und ruft SetRows mit der angegebenen Anzahl von Zeilen an).

    Wenn bulk_fetch kleiner als eins ist, gibt SetRows (null) zurück.

Hinweise

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

Sie können db_command entweder mit der Gültigkeitsbereich Klasse oder Funktion verwenden. Der Hauptunterschied ist der Bereich des CCommand-Objekts.Der Gültigkeitsbereich der Funktion beendet werden Daten wie Bindungen an der Funktion beendet sind.Funktions-Verwendung der Gültigkeitsbereich Klassen- und setzt den OLE DB-Consumer-Vorlagenklasse CCommand<>, aber die Vorlagenargumente weichen for Func and Classes fälle.Klicken Accessor Groß-/Kleinschreibung Funktionen werden Bindungen, der lokale Variablen enthält, während die Klassen verwenden CAccessorabgeleitete Klasse als Argument ableitet.Bei Verwendung als class-Attribut, db_command , funktioniert in Verbindung mit db_column.

db_command kann verwendet werden, um Befehle auszuführen, die kein Resultset zurückgeben.

Wenn der Consumer Attribut für Textanbieter dieses Attribut auf eine Klasse angewendet wird, benennt der Compiler die Klasse zum _TheClassNameAccessor, in dem TheClassName der Name ist, den Sie für die Klasse haben, und der Compiler außerdem eine Klasse erstellt, die TheClassName aufgerufen wird , die vom _TheClassNameAccessor berechnet.In der Klassenansicht finden Sie unter beide Klassen.

Beispiel

Dieses Beispiel definiert einen Befehl, der den Vor- und Nachnamen aus einer Tabelle auswählt, in der die Spalte Status „Zertifizierungsstelle“ entspricht.db_command erstellt und liest ein Rowset, auf den Sie vom Assistenten generierte Funktionen wie OpenAll und CloseAllMemberfunktionen aufrufen können, sowie CRowset wie MoveNext.

Beachten Sie, dass dieser Code benötigt der Verbindungszeichenfolge bereitstellen Kneipen verfügen, die eine Verbindung mit der Datenbank herstellt.Informationen dazu, wie dies in der Entwicklungsumgebung finden Sie unter Gewusst wie: Herstellen einer Verbindung mit einer Datenbank über den Server-Explorer und How to: Add New Data Connections in Server Explorer/Database Explorerausführt.

// 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 einer Datenquellenklasse CMySourceund db_command und CCommand1 Befehlsklassen für 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

Attribut-Kontext

Betrifft

Klasse, struct, Member, Möglichkeit, lokale Variablen

Wiederholbar

Nein

Erforderliche Attribute

None

Ungültige Attribute

None

Weitere Informationen über das kontexte finden Sie unter Attribut-Kontexte.

Siehe auch

Weitere Ressourcen

OLE DB-Consumerattribute

Eigenständige Attribute

Attributes Samples