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.