Compartilhar via


db_command

Cria um comando OLE DB.

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

Parâmetros

  • command
    Uma seqüência de caracteres de comando que contém o texto de um comando de banco de dados OLE. Um exemplo simples é:

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

    O comando sintaxe é a seguinte:

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

    A Bloco de parâmetro de ligação é definido da seguinte maneira:

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

    Onde:

    ( marca o início do bloco de ligação de dados.

    bindtype é uma das seguintes seqüências de caracteres de maiúsculas e minúsculas:

    • [db_column] vincula cada uma das variáveis membro a uma coluna em um conjunto de linhas.

    • [bindto] (mesmo que [db_column]).

    • [in] vincula as variáveis de membro como parâmetros de entrada.

    • [out] vincula as variáveis de membro como parâmetros de saída.

    • [in, out] vincula as variáveis de membro como parâmetros de entrada/saída.

    SzVarX resolve para uma variável de membro dentro do escopo atual.

    ) marca o final do bloco de ligação de dados.

    Se a seqüência de caracteres de comando contém um ou mais especificadores, como [in], [out] ou [/ saída], db_command cria um mapa de parâmetro.

    Se a seqüência de caracteres de comando contém um ou mais parâmetros, como [db_column] ou [bindto] db_command gera um conjunto de linhas e um mapa de acessador para atender a essas variáveis acoplados. Consulte db_accessor para obter mais informações.

    Dica

    bindtype sintaxe e obindings parâmetro não são válidos ao usar db_command no nível de classe.

    Aqui estão alguns exemplos de ligação de blocos de parâmetro. O exemplo a seguir vincula a m_au_fname e m_au_lname membros de dados para o au_fname e au_lname colunas, respectivamente, da tabela autores do banco de dados 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 (opcional)
    O nome do identificador que você usa para trabalhar com o conjunto de linhas. Se você especificar nome, db_command gera uma classe com o especificado nome, que pode ser usado para percorrer o conjunto de linhas ou para executar várias consultas de ação. Se você não especificar nome, não será possível retornar mais de uma linha de resultados para o usuário.

  • source_name (opcional)
    O CSession variável ou instância de uma classe que tem o db_source atributo aplicado a ele no qual o comando será executado. Consulte db_source.

    db_command verificações para garantir que a variável usada para source_name é válido, para que a variável especificada deve estar no escopo global ou de função.

  • hresult(opcional)
    Identifica a variável que receberá o HRESULT deste comando de banco de dados. Se a variável não existir, ele será automaticamente injetado pelo atributo.

  • ligações (opcional)
    Permite separar os parâmetros de ligação do comando OLE DB.

    Se você especificar um valor para bindings, db_command irá analisar o valor associado e não analisará o bindtype parâmetro. Esse uso permite que você use a sintaxe do provedor OLE DB. Para desativar a análise, sem a vinculação de parâmetros, especifique ligações = "".

    Se você não especificar um valor para bindings, db_command analisará o bloco de parâmetro de ligação, procurando '(', em seguida, bindtype em colchetes, seguidos por um ou mais declaradas anteriormente C++ variáveis-membro, seguido de ')'. Todo o texto entre parênteses será removido do comando resultante, e esses parâmetros serão usados para construir ligações de coluna e o parâmetro para este comando.

  • bulk_fetch(opcional)
    Um valor inteiro que especifica o número de linhas a serem recuperadas.

    O valor padrão é 1, que especifica a busca de única linha (o conjunto de linhas será do tipo CRowset).

    Um valor maior que 1 Especifica a busca de linha em massa. Busca de linha em massa refere-se à capacidade de conjuntos de linhas em massa para buscar vários identificadores de linha (o conjunto de linhas será do tipo CBulkRowset e entrará em contato SetRows com o número especificado de linhas).

    Se bulk_fetch é menor que 1, SetRows retornará zero.

Comentários

db_command cria um CCommand objeto, que é usado por um consumidor de OLE DB para executar um comando.

Você pode usar db_command com o escopo de função ou classe. a principal diferença é o escopo da CCommand objeto. Com o escopo de função, dados, como ligações terminam no final da função. Usos de escopo de classe e a função envolvem a classe OLE DB consumidor modelo < de > CCommand, mas os argumentos de modelo são diferentes para os casos de função e de classe. No caso de função, as ligações serão feitas para um acessador que abrange variáveis locais, enquanto o uso da classe deduzirá uma CAccessor-derivada da classe como argumento. Quando usado como um atributo de classe, db_command funciona em conjunto com db_column.

db_command pode ser usado para executar comandos que não retornam um conjunto de resultados.

Quando o provedor de atributo do consumidor aplica esse atributo para uma classe, o compilador irá renomear a classe para _YourClassNameacessador, onde YourClassName é o nome que você deu a classe e o compilador também criará uma classe chamada YourClassName, que é derivada de _YourClassNameacessador. No modo de exibição de classe, você verá as duas classes.

Exemplo

Este exemplo define um comando que seleciona os nomes e sobrenomes de uma tabela em que a coluna estado corresponde a 'CA'. db_command cria e lê um conjunto de linhas em que você pode chamar funções geradas pelo assistente, como OpenAll e CloseAll, bem como CRowset funções de membro como MoveNext.

Observe que esse código requer que você forneça sua própria seqüência de conexão que se conecta ao banco de dados pubs. Para obter informações sobre como fazer isso no ambiente de desenvolvimento, consulte Como se conectar a um banco de dados do Gerenciador de Servidores e 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 exemplo utiliza db_source em uma classe de fonte de dados CMySource, e db_command nas classes de 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();
}

Requisitos

Contexto de atributo

Se aplica a

classe, struct, membro, método, local

Reproduzíveis

Não

Atributos obrigatórios

Nenhum

Atributos inválidos

Nenhum

Para obter mais informações sobre os contextos de atributo, consulte Atributo contextos.

Consulte também

Outros recursos

Atributos de consumidor de banco de dados OLE

Atributos autônomos

Attributes Samples