db_command
Crée une commande OLE DB.
[ db_command(
command,
name,
source_name,
hresult,
bindings,
bulk_fetch)
]
Paramètres
command
Une chaîne d'ordres qui contient le texte d'une commande OLE DB. un exemple simple est :[ db_command ( command = "Select * from Products" ) ]
La commande est la suivante :
binding parameter block 1 OLE DB command binding parameter block 2 continuation of OLE DB command binding parameter block 3 ...
Un bloc de liaison de paramètre est défini comme suit :
([bindtype**]**szVar1 [, szVar2 [, nVar3 [,…]]] )
où :
( marque le début du bloc de liaison de données.
[bindtype] est l'une des chaînes ne respectant pas la casse suivantes :
[db_column] lie chacune des variables membres à une colonne d'un jeu de lignes.
[bindto] (même que [db_column]).
variables membres de liaisons de**[in]** comme paramètres d'entrée.
variables membres de liaisons de**[out]** comme paramètres de sortie.
variables membres de liaisons de**[in, out]** comme paramètres d'entrée/sortie.
résolutions deSzVarX à une variable membre dans la portée actuelle.
) marque la fin du bloc de liaison de données.
Si la chaîne du contrôle contient un ou plusieurs spécificateurs [in]telles que [out], ou [in/out], db_command génère un mappage de paramètre.
Si la chaîne du contrôle contient un ou plusieurs paramètres tels que db_column [] ou [bindto], db_command génère un ensemble de lignes et un mappage d'accesseur pour traiter ces variables liées. Consultez db_accessor pour plus d'informations.
Notes
[la syntaxe d'bindtype] et le paramètre d' bindings sont valides lors de l'utilisation de db_command au niveau de la classe.
Voici quelques exemples de liaison de blocs de paramètre. L'exemple suivant lie les données membres d' m_au_fname et d' m_au_lname aux colonnes d' au_fname et d' au_lname , respectivement, de la table Authors de la base de données 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)")
]
nom (facultatif)
Le nom du handle que vous utilisez pour utiliser l'ensemble de lignes. Si vous spécifiez le nom, db_command génère une classe avec le nomspécifié, qui peut être utilisé pour parcourir l'ensemble de lignes ou pour exécuter plusieurs requêtes Action. Si vous ne spécifiez pas le nom, il ne sera pas possible de retourner plusieurs lignes de résultats à l'utilisateur.source_name (facultatif)
La variable d' CSession ou l'instance d'une classe qui a l'attribut d' db_source appliquée à celui-ci sur lequel la commande s'exécute. Consultez db_source.les contrôles dedb_command de garantir que la variable utilisée pour le source_name est valide, donc la variable spécifiée doivent figurer dans la fonction ou la portée globale.
hresult (facultatif)
Identifie la variable qui recevra HRESULT de cette commande de base de données. si la variable n'existe pas, elle sera automatiquement injectée par l'attribut.liaisons (facultatif)
Vous permet de séparer les paramètres obligatoires de la commande OLE DB.Si vous spécifiez une valeur pour bindings, db_command quelconque la valeur associée et ne quelconque pas [le paramètre d'bindtype]. Cette utilisation vous permet à la syntaxe du fournisseur OLE DB de utilisation. pour désactiver l'analyse, sans paramètres obligatoires, spécifiez " " Dans Bindings=.
Si vous ne spécifiez pas de valeur pour bindings, db_command quelconque le bloc de liaison de paramètre, en recherchant « (", suivi de [bindtype] entre parenthèses, suivi d'un ou de plusieurs variables membres déclarées précédemment C++, suivies ") ». Tout le texte entre les parenthèses sera supprimé de l'ordre résultant, et ces paramètres sont utilisés pour construire des liaisons de colonnes et de paramètre de cette commande.
bulk_fetch(facultatif)
Une valeur qui spécifie le nombre de lignes à récupérer.La valeur par défaut est 1, qui spécifie récupérer unique de ligne (ensemble de lignes est de type CRowset).
Une valeur supérieure à 1 spécifie l'extraction de lignes en bloc. L'extraction de lignes en bloc fait référence à la capacité des ensembles de lignes en bloc d'extraire plusieurs handles de ligne (ensemble de lignes est de type CBulkRowset et appelle SetRows avec le nombre de lignes spécifié).
Si le bulk_fetch est moins un, SetRows retourne zéro.
Notes
db_command crée un objet de CCommand , qui est utilisé par un consommateur OLE DB pour exécuter une commande.
Vous pouvez utiliser db_command avec la classe ou la portée de la fonction ; la différence principale est la portée de l'objet d' CCommand . Avec la portée de la fonction, des données telles que les liaisons se terminent à la fin de la fonction. Les utilisations de portée de classe et les fonctions impliquent une classe de modèle **CCommand<>**du consommateur OLE DB, mais les arguments template diffèrent pour les cas de fonction et de classe. Dans le cas de fonction, les liaisons sont faites à accesseur impliquant des variables locales, alors que l'utilisation de classe déduit CAccessorclasse dérivée comme argument. En cas de utilisation comme attribut de classe, db_command fonctionne conjointement avec db_column.
db_command peut être utilisé pour exécuter des commandes qui ne retournent pas un jeu de résultats.
Lorsque le fournisseur d'attributs du consommateur applique cet attribut à une classe, le compilateur renommera la classe au _YourClassNameAccessor, où YourClassName est le nom que vous avez donné à la classe, et le compilateur crée également une classe appelée YourClassName, qui dérive de _YourClassNameAccessor. Dans l'Affichage de classes, vous verrez les deux classes.
Exemple
Cet exemple définit une commande qui sélectionne le premier et les noms d'un tableau où l'autorité de certification des correspondances de colonne du rapport ». db_command crée et lit un jeu de lignes auquel vous pouvez appeler des fonctions générées par l'Assistant telles que OpenAll et CloseAll, ainsi que les fonctions membres d' CRowset telles que MoveNext.
Notez que ce code vous obligent à fournir votre propre chaîne de connexion qui se connecte à pubs la base de données. Pour plus d'informations sur la façon de faire dans l'environnement de développement, consultez Comment : établir une connexion à une base de données à partir de l'Explorateur de serveurs et le How to: Add New Data Connections in Server Explorer/Database Explorer.
// 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();
}
Cet exemple utilise db_source sur une classe source de données CMySource, et db_command sur les classes CCommand1 et CCommand2de commande.
// 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();
}
Configuration requise
contexte d'attribut
S'applique à |
classe, struct, membre, méthode, les variables locales |
reproductible |
Non |
attributs requis |
Aucun |
attributs valides |
Aucun |
Pour plus d'informations sur les contextes d'attribut, consultez contextes d'attribut.