Condividi tramite


db_command

Crea un comando OLE DB.

[ 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" ) ]
    

    comando la sintassi è la seguente:

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

    In blocco obbligatorio di parametro viene definito come segue:

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

    Dove:

    ( contrassegna l'inizio del blocco di associazione dati.

    [bindtype] è una delle stringhe senza distinzione tra maiuscole e minuscole:

    • [db_column] associa ciascuna delle variabili membro a una colonna in un rowset.

    • [bindto] (equivale 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.

    SzVarX punta a una variabile membro nell'ambito corrente.

    ) contrassegna la fine del blocco di associazione dati.

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

    se la stringa di comando contiene uno o più parametri come [db_column] o [bindto], db_command genera un rowset e un mapping della funzione di accesso per soddisfare queste variabili associate.vedere db_accessor per ulteriori informazioni.

    [!NOTA]

    [bindtype] sintassi e bindings il parametro non è valido in caso di utilizzo db_command a livello di classe.

    Di seguito sono riportati alcuni esempi di blocchi di associazione di parametro.Nell'esempio seguente viene associato m_au_fname e m_au_lname membri dati a au_fname e au_lname colonne, rispettivamente, della tabella authors del database 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)")
    

    ]

  • nome (facoltativo)
    Il nome dell'handle utilizzati per utilizzare il rowset.Se si specifica nome, db_command genera una classe con specificato nome, che può essere utilizzato per scorrere il rowset o per eseguire query di azione più.Se non si specifica nome, non sarà possibile restituire più righe di risultati all'utente.

  • source_name (facoltativo)
    CSession variabile o istanza di una classe che ha db_source attributo applicato a sul quale il comando viene eseguito.vedere db_source.

    db_command controlli da garantire che la variabile utilizzata per source_name è valido, pertanto la variabile specificata deve trovarsi nella funzione o nell'ambito globale.

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

  • associazioni (facoltativo)
    Consente di separare i parametri richiesti dal comando OLE DB.

    Se si specifica un valore per bindings, db_command analizza il valore associato e non analizza [bindtype] parametro.Questo utilizzo consente di sintassi provider OLE DB di utilizzo.per disabilitare l'analisi, senza parametri obbligatori, specificare "" Di Bindings=.

    Se non si specifica un valore per bindings, db_command analizza il blocco obbligatorio di parametro, trovando '(“, seguito da [bindtype] tra parentesi, seguiti da uno o più precedentemente dichiarata le variabili membro di C++, seguiti da serializzarne**)**“.Tutto il testo tra le parentesi verrà rimosso dal comando risultante e questi parametri saranno utilizzati per costruire la colonna e le associazioni di parametri per questa sequenza.

  • bulk_fetch(facoltativo)
    Un valore intero che specifica il numero di righe da recuperare.

    Il valore predefinito è 1, che specifica solo il recupero della riga (rowset di sarà di tipo CRowset).

    Un valore maggiore di 1 specifica il recupero di massa di righe.Il recupero di massa di righe " si riferisce alla possibilità dei rowset di massa di recuperare l'handle di riga più (rowset di sarà di tipo CBulkRowset e chiamerà SetRows con il numero specificato di righe).

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

Note

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

È possibile utilizzare db_command con classe o dell'ambito della funzione, la differenza principale è l'ambito di l CCommand oggetto.Nell'ambito della funzione, i dati come associazioni terminano alla fine della funzione.Sia gli utilizzi dell'ambito della funzione della classe includono la classe di modelli consumer OLE DB CCommand<>, ma gli argomenti di template differiscono per i casi della classe e di funzione.Nel caso di funzione, le associazioni verranno apportate a funzione di accesso che include le variabili locali, mentre l'utilizzo della classe a desumere un oggetto CAccessorclasse derivata da come argomento.Una volta utilizzato come attributo della classe, db_command opera congiuntamente a db_column.

db_command può essere utilizzato per eseguire i comandi che restituiscono un gruppo di risultati.

Quando il provider di tipo consumer di attributo applicato questo attributo a una classe, il compilatore la classe a _TheClassNamefunzione di accesso, dove TheClassName è il nome assegnato alla classe e il compilatore inoltre creata una classe denominata TheClassName, quale deriva da _TheClassNamefunzione di accesso.In Visualizzazione classi, verranno visualizzate entrambe le classi.

Esempio

In questo esempio viene definito un comando che consente di selezionare il primo e il cognome da una tabella in cui la CA di stato delle corrispondenze della colonna„.db_command crea e legge un rowset in cui è possibile chiamare le funzioni generate mediante la creazione guidata come OpenAll e CloseAllnonché CRowset funzioni membro come MoveNext.

Si noti che questo codice è necessario specificare per contenere la stringa di connessione che connette a pub il database.Per informazioni su come eseguire questa operazione nell'ambiente di sviluppo, vedere Procedura: connettersi a un database da Esplora server e Procedura: Aggiungere nuove connessioni dati in Esplora server/Esplora database.

// 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 questo esempio viene utilizzato db_source in una classe di origine dati CMySourcee db_command le classi dei comandi 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 di attributo

Si applica a

classe, struct, membro, metodo, locale

ripetibile

No

attributi obbligatori

Nessuno

attributi non validi

Nessuno

per ulteriori informazioni sui contesti di attributo, vedere Associare ai contesti.

Vedere anche

Altre risorse

Attributi del consumer OLE DB

Attributi autonomi

Attributes Samples