Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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