Compartilhar via


Classe CCommand

Fornece métodos para definir e executar um comando.

Sintaxe

template <class TAccessor = CNoAccessor,
   template <typename T> class TRowset = CRowset,
   class TMultiple = CNoMultipleResults>
class CCommand :
   public CAccessorRowset <TAccessor, TRowset>,
   public CCommandBase,
   public TMultiple

Parâmetros

TAccessor
O tipo de classe de acessador (como CDynamicParameterAccessor, CDynamicStringAccessor ou CEnumeratorAccessor) que você deseja que o comando use. O padrão é CNoAccessor, que especifica que a classe não dá suporte a parâmetros ou colunas de saída.

TRowset
O tipo de classe de conjunto de linhas (como CArrayRowset ou CNoRowset) que você deseja que o comando use. O padrão é CRowset.

TMultiple
Para usar um comando OLE DB que pode retornar vários resultados, especifique CMultipleResults. Caso contrário, use CNoMultipleResults. Para obter detalhes, consulte IMultipleResults.

Requisitos

Cabeçalho: atldbcli.h

Membros

Métodos

Nome Descrição
Fechar Fecha o comando atual.
GetNextResult Busca o próximo resultado ao usar vários conjuntos de resultados.
Aberto Executa e, opcionalmente, associa o comando.

Métodos herdados

Nome Descrição
Criar Cria um novo comando para a sessão especificada e define o texto do comando.
CreateCommand Cria um novo comando.
GetParameterInfo Obtém uma lista dos parâmetros do comando, seus nomes e seus tipos.
Preparar Valida e otimiza o comando atual.
ReleaseCommand Libera o acessador de parâmetro se necessário, e, em seguida, libera o comando.
SetParameterInfo Especifica o tipo nativo de cada parâmetro do comando.
Unprepare Descarta o plano de execução do comando atual.

Comentários

Use essa classe quando precisar executar uma operação baseada em parâmetros ou executar um comando. Se você precisar apenas abrir um conjunto de linhas simples, use CTable.

A classe de acessador que você está usando determina o método de dados e parâmetros de associação.

Observe que não é possível usar procedimentos armazenados com o provedor OLE DB para Jet porque esse provedor não dá suporte a procedimentos armazenados (somente constantes são permitidas em cadeias de caracteres de consulta).

CCommand::Close

Libera o conjunto de linhas do acessador associado ao comando.

Sintaxe

void Close();

Comentários

Um comando usa um conjunto de linhas, um acessador de conjunto de resultados e (opcionalmente) um acessador de parâmetros (ao contrário das tabelas, que não dão suporte a parâmetros e não precisam de um acessador de parâmetro).

Ao executar um comando, você deve chamar Close e ReleaseCommand após o comando.

Quando quiser executar o mesmo comando repetidamente, você deve liberar cada acessador do conjunto de resultados chamando Close antes de chamar Execute. No final da série, você deve liberar o acessador de parâmetro chamando ReleaseCommand. Outro cenário comum é chamar um procedimento armazenado que tenha parâmetros de saída. Em muitos provedores (como o provedor OLE DB para SQL Server), os valores do parâmetro de saída não estarão acessíveis até que você feche o acessador do conjunto de resultados. Chame Close para fechar o conjunto de linhas retornado e o acessador do conjunto de resultados, mas não o acessador de parâmetros, permitindo que você recupere os valores do parâmetro de saída.

Exemplo

O exemplo a seguir mostra como você pode chamar Close e ReleaseCommand quando executa o mesmo comando repetidamente.

void DoCCommandTest()
{
   HRESULT hr;

   hr = CoInitialize(NULL);

   CCustomer rs;           // Your CCommand-derived class
   rs.m_BillingID = 6611;  // Open billing ID 6611
   hr = rs.OpenAll();      // (Open also executes the command)
   hr = rs.MoveFirst();    // Move to the first row and print it

   _tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
      rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);

   // Close the first command execution
   rs.Close();

   rs.m_BillingID = 3333;     // Open billing ID 3333 (a new customer)
   hr = rs.Open();            // (Open also executes the command)
   hr = rs.MoveFirst();       // Move to the first row and print it

   _tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
      rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);

   // Close the second command execution;
   // Instead of the two following lines
   // you could simply call rs.CloseAll()
   // (a wizard-generated method):
   rs.Close();
   rs.ReleaseCommand();

   CoUninitialize();
}

CCommand::GetNextResult

Buscará o próximo conjunto de resultados se algum estiver disponível.

Sintaxe

HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
   bool bBind = true) throw();

Parâmetros

pulRowsAffected
[in/out] Um ponteiro para a memória onde a contagem de linhas afetadas por um comando é retornada.

bBind
[in] Especifica se o comando deve ser associado automaticamente após a execução. O padrão é true, o que faz com que o comando seja associado automaticamente. Configurar o bBind como false impede a associação automática do comando para que você possa fazer a associação manualmente. (A associação manual é de interesse particular de usuários OLAP.)

Valor de retorno

Um valor HRESULT padrão.

Comentários

Se um conjunto de resultados tiver sido buscado anteriormente, essa função liberará o conjunto de resultados anterior e desassociará as colunas. Se bBind for true, ele associará as novas colunas.

Você deve chamar essa função somente se tiver especificado vários resultados definindo o parâmetro de modelo CCommand TMultiple=CMultipleResults.

CCommand::Open

Executa e, opcionalmente, associa o comando.

Sintaxe

HRESULT Open(const CSession& session,
   LPCWSTR wszCommand,
   DBPROPSET *pPropSet = NULL,
   DBROWCOUNT* pRowsAffected = NULL,
   REFGUID guidCommand = DBGUID_DEFAULT,
   bool bBind = true,
   ULONG ulPropSets = 0) throw();

HRESULT Open(const CSession& session,
   LPCSTR szCommand,
   DBPROPSET *pPropSet = NULL,
   DBROWCOUNT* pRowsAffected = NULL,
   REFGUID guidCommand = DBGUID_DEFAULT,
   bool bBind = true,
   ULONG ulPropSets = 0) throw();

HRESULT Open(const CSession& session,
   INT szCommand = NULL,
   DBPROPSET *pPropSet = NULL,
   DBROWCOUNT* pRowsAffected = NULL,
   REFGUID guidCommand = DBGUID_DEFAULT,
   bool bBind = true,
   ULONG ulPropSets = 0) throw();

HRESULT Open(DBPROPSET *pPropSet = NULL,
   DBROWCOUNT* pRowsAffected = NULL,
   bool bBind = true,
   ULONG ulPropSets = 0) throw();

Parâmetros

sessão
[in] A sessão na qual executar o comando.

wszCommand
[in] O comando a ser executado, passado como uma cadeia de caracteres Unicode. Pode ser NULL ao usar CAccessor. Nesse caso, o comando será recuperado do valor passado para a macro DEFINE_COMMAND. Consulte ICommand::Execute na Referência do Programador OLE DB para obter detalhes.

szCommand
[in] O mesmo que wszCommand, exceto que esse parâmetro usa uma cadeia de caracteres de comando ANSI. A quarta forma desse método pode ter um valor NULL. Consulte "Comentários" mais adiante neste tópico para obter detalhes.

pPropSet
[in] Um ponteiro para uma matriz de estruturas DBPROPSET que contêm propriedades e valores a serem definidos. Confira Conjuntos de propriedades e grupos de propriedades na Referência do programador OLE DB no SDK do Windows.

pRowsAffected
[in/out] Um ponteiro para a memória onde a contagem de linhas afetadas por um comando é retornada. Se *pRowsAffected for NULL, nenhuma contagem de linhas será retornada. Caso contrário, Open define *pRowsAffected de acordo com as seguintes condições:

If Então
O elemento cParamSets de pParams é maior que 1 O *pRowsAffected representa o número total de linhas afetadas por todos os conjuntos de parâmetros especificados na execução.
O número de linhas afetadas não está disponível *pRowsAffected está definido como -1.
O comando não atualiza, exclui ou insere linhas *pRowsAffected é indefinido.

guidCommand
[in] Um GUID que especifica a sintaxe e as regras gerais para o provedor usar na análise de texto do comando. Consulte ICommandText::GetCommandText e ICommandText::SetCommandText na Referência do Programador OLE DB para obter detalhes.

bBind
[in] Especifica se o comando deve ser associado automaticamente após a execução. O padrão é true, o que faz com que o comando seja associado automaticamente. Configurar o bBind como false impede a associação automática do comando para que você possa fazer a associação manualmente. (A associação manual é de interesse particular de usuários OLAP.)

ulPropSets
[in] O número de estruturas DBPROPSET passadas no argumento pPropSet.

Valor de retorno

Um valor HRESULT padrão.

Comentários

As três primeiras formas de Open recebem uma sessão, criam um comando e executam o comando associando todos os parâmetros conforme necessário.

A primeira forma de Open recebe uma cadeia de caracteres de comando Unicode e não tem nenhum valor padrão.

A segunda forma de Open recebe uma cadeia de caracteres de comando ANSI e nenhum valor padrão (fornecido para compatibilidade com versões anteriores com aplicativos ANSI existentes).

A terceira forma de Open permite que a cadeia de caracteres de comando seja NULL, devido ao tipo int com um valor padrão de NULL. Ele é fornecido para chamar Open(session, NULL); ou Open(session); porque NULL é do tipo int. Essa versão requer e declara que o parâmetro int seja NULL.

Use a quarta forma de Open quando você já criou um comando e deseja executar uma única Preparação e várias execuções.

Observação

Open chama Execute, que, por sua vez, chama GetNextResult.

CCommand::Create

Chama CCommand::CreateCommand para criar um comando para a sessão especificada e, em seguida, chama ICommandText::SetCommandText para especificar o texto do comando.

Sintaxe

HRESULT CCommandBase::Create(const CSession& session,
   LPCWSTR wszCommand,
   REFGUID guidCommand = DBGUID_DEFAULT) throw ();

HRESULT CCommandBase::Create(const CSession& session,
   LPCSTR szCommand,
   REFGUID guidCommand = DBGUID_DEFAULT) throw ();

Parâmetros

sessão
[in] Uma sessão na qual criar o comando.

wszCommand
[in] Um ponteiro para o texto Unicode da cadeia de caracteres de comando.

szCommand
[in] Um ponteiro para o texto ANSI da cadeia de caracteres de comando.

guidCommand
[in] Um GUID que especifica a sintaxe e as regras gerais para o provedor usar na análise de texto do comando. Para obter uma descrição dos dialetos, consulte ICommandText::GetCommandText na Referência do Programador OLE DB.

Valor de retorno

Um valor HRESULT padrão.

Comentários

A primeira forma de Create recebe uma cadeia de caracteres de comando Unicode. A segunda forma de Create recebe uma cadeia de caracteres de comando ANSI (fornecida para compatibilidade com versões anteriores com aplicativos ANSI existentes).

CCommand::CreateCommand

Cria um novo comando.

Sintaxe

HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();

Parâmetros

sessão
[in] Um objeto CSession a ser associado ao novo comando.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Esse método cria um comando usando o objeto de sessão especificado.

CCommand::GetParameterInfo

Obtém uma lista dos parâmetros do comando, seus nomes e seus tipos.

Sintaxe

HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,
   DBPARAMINFO** ppParamInfo,
   OLECHAR** ppNamesBuffer) throw ();

Parâmetros

Consulte ICommandWithParameters::GetParameterInfo na Referência do programador OLE DB.

Valor de retorno

Um valor HRESULT padrão.

CCommand::Prepare

Valida e otimiza o comando atual.

Sintaxe

HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();

Parâmetros

cExpectedRuns
[in] O número de vezes que você espera executar o comando.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Esse método encapsula o método OLE DB ICommandPrepare::Prepare.

CCommand::ReleaseCommand

Libera o acessador de parâmetro e libera o próprio comando.

Sintaxe

void CCommandBase::ReleaseCommand() throw();

Comentários

ReleaseCommand é usado em conjunto com Close. Consulte Fechar para obter detalhes de uso.

CCommand::SetParameterInfo

Especifica o tipo nativo de cada parâmetro do comando.

Sintaxe

HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
   const DBORDINAL* pOrdinals,
   const DBPARAMBINDINFO* pParamInfo) throw();

Parâmetros

Consulte ICommandWithParameters::SetParameterInfo na Referência do programador OLE DB.

Valor de retorno

Um valor HRESULT padrão.

CCommand::Unprepare

Descarta o plano de execução do comando atual.

Sintaxe

HRESULT CCommandBase::Unprepare() throw();

Valor retornado

Um valor HRESULT padrão.

Comentários

Esse método encapsula o método OLE DB ICommandPrepare::Unprepare.

Confira também

Modelos de consumidor OLE DB
Referência de modelos de consumidor do OLE DB