db_command
Crea un comando OLE DB.
[ db_command(
command,
name,
source_name,
hresult,
bindings,
bulk_fetch)
]
Parámetros
command
Una cadena de comando que contiene el texto de un comando OLE DB.un ejemplo simple es:[ db_command ( command = "Select * from Products" ) ]
La sintaxis del comando es la siguiente:
binding parameter block 1 OLE DB command binding parameter block 2 continuation of OLE DB command binding parameter block 3 ...
Un bloque de enlace de parámetro se define como sigue:
([bindtype**]**szVar1 [, szVar2 [, nVar3 [,…]]] )
donde:
( marca el inicio del bloque de enlace de datos.
[bindtype] es una de las cadenas sin distinción entre mayúsculas y minúsculas siguientes:
[db_column] enlaza cada una de las variables miembro a una columna de un conjunto de filas.
[] bindto (igual que [db_column]).
[in] enlaza a variables miembro como parámetros de entrada.
[out] enlaza a variables miembro como parámetros de salida.
[in, out] enlaza a variables miembro como parámetros de entrada y salida.
SzVarX resuelve una variable miembro dentro del ámbito actual.
) marca el final del bloque de enlace de datos.
Si la cadena de comando contiene uno o varios especificadores [in]como [out], o [in/out], db_command compila una asignación de parámetros.
Si la cadena de comando contiene uno o más parámetros por ejemplo [db_column] o [bindto], db_command genera un conjunto de filas y un descriptor de acceso asignados para mantener estas variables enlazadas.Vea db_accessor para obtener más información.
[!NOTA]
la sintaxis de [bindtype] y el parámetro de bindings no son válidos al utilizar db_command en el nivel de clase.
A continuación se muestran algunos ejemplos de enlazar los bloques de parámetro.El ejemplo siguiente se enlaza a los miembros de datos de m_au_fname y de m_au_lname a las columnas de au_fname y de au_lname , respectivamente, de la tabla authors de la base de datos 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)")
]
(opcional)nombre
El nombre del identificador que se utiliza para ejecutar el conjunto de filas.Si especifica nombre, db_command genera una clase con el nombreespecificado, que se puede utilizar para recorrer el conjunto de filas o para ejecutar consultas de varias acciones.Si no se especifica nombre, no será posible devolver más de una fila de resultados al usuario.source_name (opcional)
La variable de CSession o la instancia de una clase que tiene el atributo de db_source aplicado en la que se ejecuta el comando.Vea db_source.las comprobaciones dedb_command para asegurarse de que la variable utilizada para el source_name es válida, por lo que la variable especificada deben estar en la función o el ámbito global.
hresult (opcional)
identifica la variable que recibirá HRESULT de este comando de base de datos.Si no existe la variable, automáticamente se insertada por el atributo.enlaces (opcional)
Permite separar los parámetros obligatorios de comando de OLE DB.Si especifica un valor para bindings, db_command convertirá el valor asociado y no convertirá el parámetro [bindtype].Este uso permite utilizar sintaxis de proveedor OLE DB.para deshabilitar el análisis, sin parámetros obligatorios, especifique "" De Bindings=.
Si no especifica un valor para bindings, db_command analizará el bloque de enlace de parámetro, buscando “(”, seguido por [bindtype] en corchetes, seguidos por una o más variables miembros previamente declaradas de C++, seguidas por ")”.Todo el texto entre paréntesis se eliminará del comando resultante, y estos parámetros se utilizan para construir los enlaces de columna y parámetro para este comando.
bulk_fetch(opcional)
un valor entero que especifica el número de filas para capturar.El valor predeterminado es 1, que especifica solo capturar de fila (el conjunto de filas será de CRowsettipo).
Un valor mayor que 1 especifica la obtención de filas masiva.La obtención masiva de filas hace referencia a la capacidad de conjuntos de filas masivos de recuperar múltiples identificadores de fila (el conjunto de filas será de CBulkRowset escrito y llamará SetRows con el número de filas especificado).
Si el bulk_fetch menos de uno, SetRows devolverá cero.
Comentarios
db_command crea un objeto de CCommand , que utiliza un consumidor OLE DB para ejecutar un comando.
Puede utilizar db_command con la clase o el ámbito de la función; la diferencia principal es el ámbito del objeto de CCommand .Ámbito de la función, los datos como enlaces finalizan al final de la función.Los usos del ámbito de clase y función implican la clase **CCommand<>**para plantillas de consumidor OLE DB, pero los argumentos de plantilla difieren de los casos de la función y la clase.En el caso de la función, los enlaces se crearán a Descriptor que incluya variables locales, mientras que el uso de la clase deducirá CAccessor- clase derivada como argumento.Cuando se usa como atributo class, db_command funciona junto con db_column.
db_command se puede utilizar para ejecutar los comandos que devuelven un conjunto de resultados.
Cuando el proveedor de atributos de consumidor aplicar este atributo a una clase, el compilador cambiará la clase al _TheClassNameAccessor, donde es el nombre TheClassName que asignó la clase, y el compilador también creará una clase denominada TheClassName, que deriva de _TheClassNameAccessor.En la vista de clases, verá ambas clases.
Ejemplo
Este ejemplo define un comando que selecciona el nombre y el apellido de una tabla donde CA de las coincidencias de la columna de estado”.db_command crea y lee un conjunto de filas en el que pueda llamar generado por el asistente funcione como OpenAll y CloseAll, así como miembro de CRowset funciona como MoveNext.
Observe que este código necesita proporcionar dispone de la cadena de conexión que conecte con los pubs la base de datos.Para obtener información sobre cómo hacer esto en el entorno de desarrollo, vea Cómo: Conectar con una base de datos desde el Explorador de servidores y 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();
}
Este ejemplo utiliza db_source en una clase CMySourcede origen de datos, y db_command en las clases CCommand1 y CCommand2de comando.
// 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();
}
Requisitos
Contexto de atributo
Se aplica a |
clase, struct, miembro, método, local |
repetible |
No |
Atributos necesarios |
None |
Atributos no válidos |
None |
Para obtener más información sobre los contextos de atributos, vea Contextos de atributo.