Condividi tramite


db_command

Crea un comando OLE DB.

Sintassi

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

Parametri

command
Una stringa di comando che contiene il testo di un comando OLE DB. Un semplice esempio è:

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

La command sintassi è la seguente:

blocco di parametri di associazione 1
  Comando OLE DB
blocco di parametri di associazione 2
  continuazione del comando OLE DB
blocco di parametri di associazione 3
...

Un blocco del parametro di associazione è definito nel modo seguente:

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

dove:

  • ( contrassegna l'inizio del blocco di data binding.

  • bindtype è una delle stringhe senza distinzione tra maiuscole e minuscole seguenti:

    • [db_column] associa ogni variabile membro a una colonna in un set di righe.

    • [bindto] (uguale a [db_column]).

    • [in] associa le variabili membro come parametri di input.

    • [out] associa le variabili membro come parametri di output.

    • [in,out] associa le variabili membro come parametri di input/output.

  • szVarN, nVarN risolve le variabili membro all'interno dell'ambito corrente.

  • ) contrassegna la fine del blocco di associazione dati.

Se la stringa di comando contiene uno o più identificatori, ad [in]esempio , [out]o [in/out], db_command compila una mappa dei parametri.

Se la stringa di comando contiene uno o più parametri, ad [db_column] esempio o [bindto], db_command genera sia un set di righe che un mapping della funzione di accesso per gestire queste variabili associate. Per ulteriori informazioni, vedere db_accessor.

Nota

bindtype sintassi e il bindings parametro non sono validi quando si usa db_command a livello di classe.

Di seguito sono riportati alcuni esempi di blocchi dei parametri di associazione. Nell'esempio seguente i m_au_fname membri dati e vengono associati rispettivamente alle au_fname colonne e m_au_lname au_lname della tabella authors del pubs database:

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
(Facoltativo) Nome dell'handle usato con il set di righe. Se si specifica name, db_command genera una classe con l'oggetto specificato name, che può essere usato per attraversare il set di righe o per eseguire più query di azione. Se non si specifica name, non sarà possibile restituire più righe di risultati all'utente.

source_name
(Facoltativo) La variabile CSession o l'istanza di una classe a cui è applicato l'attributo db_source con cui viene eseguito il comando. Vedere db_source.

db_command verifica che la variabile usata per source_name sia valida, pertanto la variabile specificata deve trovarsi nell'ambito di funzione o globale.

hresult
(Facoltativo) Identifica la variabile che riceverà l'HRESULT di questo comando di database. Se la variabile non esiste, verrà inserita automaticamente dall'attributo .

bindings
(Facoltativo) Consente di separare i parametri di associazione dal comando OLE DB.

Se si specifica un valore per bindings, db_command analizza il valore associato e non analizza il bindtype parametro. Questo utilizzo consente di usare la sintassi del provider OLE DB. Per disabilitare l'analisi senza parametri di associazione, specificare Bindings="".

Se non si specifica un valore per bindings, db_command analizza il blocco di parametri di associazione. Cerca '(', seguito da una bindtype parentesi quadre, seguita da una o più variabili membro C++ dichiarate in precedenza, seguite da ')'. Rimuove tutto il testo tra parentesi dal comando risultante. Questi parametri vengono usati per costruire associazioni di colonne e parametri per questo comando.

bulk_fetch
(Facoltativo) Valore intero che specifica il numero di righe da recuperare.

Il valore predefinito è 1, che specifica il recupero di una singola riga (il set di righe sarà di tipo CRowset).

Un valore maggiore di 1 che specifica il recupero di righe in blocco. Il recupero delle righe bulk fa riferimento alla possibilità di recuperare più handle di riga (il set di righe sarà di tipo CBulkRowset e chiamerà SetRows con il numero specificato di righe).

Se bulk_fetch è minore di uno, SetRows restituirà zero.

Osservazioni:

db_command crea un CCommand oggetto utilizzato da un consumer OLE DB per eseguire un comando.

È possibile usare db_command con la classe o l'ambito della funzione. La differenza principale è l'ambito dell'oggetto CCommand . Con l'ambito di funzione, i dati come le associazioni terminano alla fine della funzione. L'uso dell'ambito di classe e dell'ambito di funzione include la classe modello del consumer OLE DB CCommand<>, ma gli argomenti del modello nei casi di ambito di funzione e di classe sono diversi. In caso di ambito di funzione, verranno create associazioni a una Accessor che include le variabili locali, mentre l'uso della classe dedurrà una classe derivata da CAccessor come argomento. Se usato come attributo di classe, db_command funziona insieme a db_column.

db_command può essere usato per eseguire comandi che non restituiscono un set di risultati.

Quando il provider di attributi consumer applica questo attributo a una classe, il compilatore rinomina la classe in _[YourClassName]Accessor, dove [YourClassName] è il nome assegnato alla classe. Il compilatore crea anche una classe denominata [YourClassName], che deriva da _[YourClassName]Accessor. In Visualizzazione classi verranno visualizzate entrambe le classi.

Esempi

Questo esempio definisce un comando che consente di selezionare i nomi e i cognomi da una tabella in cui la colonna di stato corrisponde a "CA". db_command crea e legge un set di righe in cui è possibile chiamare funzioni generate dalla procedura guidata, OpenAll ad esempio e CloseAll, nonché CRowset funzioni membro come MoveNext.

Questo codice richiede di fornire stringa di connessione personalizzate che si connettono al pubs database. Per informazioni su come fornire un stringa di connessione nell'ambiente di sviluppo, vedere Procedura: Connettersi a un database ed esplorare gli oggetti esistenti e Aggiungere nuove connessioni.

db_command.hFile di origine :

// 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.cppFile di origine :

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

Questo esempio usa db_source in una classe di origine dati CMySourcee db_command nelle classi di comando CCommand1 e 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();
}

Requisiti

Contesto attributo Valore
Si applica a class, , structmembro, metodo, locale
Ripetibile No
Attributi obbligatori None
Attributi non validi None

Per altre informazioni sui contesti degli attributi, vedere Contesti di attributo.

Vedi anche

Attributi consumer OLE DB
Attributi autonomi