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 ( CDynamicParameterAccessor
como, 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 do conjunto de linhas ( CArrayRowset
como 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 |
---|---|
Close | Fecha o comando atual. |
GetNextResult | Busca o próximo resultado ao usar vários conjuntos de resultados. |
Abrir | Executa e, opcionalmente, associa o comando. |
Métodos herdados
Nome | Descrição |
---|---|
Criar | Cria um novo comando para a sessão especificada e, em seguida, 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 libera o comando. |
SetParameterInfo | Especifica o tipo nativo de cada parâmetro de 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âmetro ou executar um comando. Se você simplesmente precisar abrir um conjunto de linhas simples, use CTable em vez disso.
A classe acessador que você está usando determina o método de vinculação de parâmetros e dados.
Observe que você não pode usar procedimentos armazenados com o provedor de OLE DB para Jet, pois esse provedor não oferece suporte a procedimentos armazenados (somente constantes são permitidas em cadeias de caracteres de consulta).
CCommand::Close
Libera o conjunto de linhas de acessador associado ao comando.
Sintaxe
void Close();
Comentários
Um comando usa um conjunto de linhas, acessador de conjunto de resultados e (opcionalmente) um acessador de parâmetro (ao contrário de 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 ambos Close
e ReleaseCommand após o comando.
Quando você quiser executar o mesmo comando repetidamente, deverá liberar cada acessador de 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 tem parâmetros de saída. em muitos provedores (como o provedor de OLE DB para SQL Server), os valores de parâmetros de saída não estarão acessíveis até que você feche o acessador de conjunto de resultados. Chame Close
para fechar o conjunto de linhas retornado e o acessador de conjunto de resultados, mas não o acessador de parâmetro, permitindo assim que você recupere os valores de 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
Busca o próximo conjunto de resultados, se houver um disponível.
Sintaxe
HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
bool bBind = true) throw();
Parâmetros
pulRowsAffected
[entrada/saída] Um ponteiro para a memória em que a contagem de linhas afetadas por um comando é retornada.
bBind
no Especifica se o comando deve ser associado automaticamente após ser executado. O padrão é true
, que faz com que o comando seja vinculado automaticamente. Definir bBind para false
impedir a associação automática do comando para que você possa associar manualmente. (A vinculação manual é de interesse particular para os usuários OLAP.)
Valor Retornado
Um HRESULT padrão.
Comentários
Se um conjunto de resultados tiver sido previamente buscado, 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 CCommand
modelo 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
no A sessão na qual executar o comando.
wszCommand
no O comando a ser executado, passado como uma cadeia de caracteres Unicode. Pode ser NULL ao usar CAccessor
, caso em que o comando será recuperado do valor passado para a macro DEFINE_COMMAND . Consulte ICommand:: execute na referência do programador de OLE DB para obter detalhes.
szCommand
no O mesmo que wszCommand , exceto pelo fato de que esse parâmetro usa uma cadeia de caracteres de comando ANSI. A quarta forma desse método pode usar um valor nulo. Consulte "Comentários" mais adiante neste tópico para obter detalhes.
pPropSet
no Um ponteiro para uma matriz de estruturas DBPROPSET que contém propriedades e valores a serem definidos. consulte conjuntos de propriedades e grupos de propriedades na referência do programador de OLE DB no SDK do Windows.
pRowsAffected
[entrada/saída] Um ponteiro para a memória em que a contagem de linhas afetadas por um comando é retornada. Se * pRowsAffected for nulo, nenhuma contagem de linhas será retornada. Caso contrário, Open
define *pRowsAffected de acordo com as seguintes condições:
If | Então |
---|---|
O cParamSets elemento de pParams é maior que 1 |
*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 do 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 vinculado automaticamente depois de ser executado. O padrão é true
, que faz com que o comando seja vinculado automaticamente. Definir bBind como false
impede a associação automática do comando para que você possa se vincular manualmente. (A associação manual é de interesse específico para usuários OLAP.)
ulPropSets
[in] O número de estruturas DBPROPSET passadas no argumento pPropSet .
Valor Retornado
Um HRESULT padrão.
Comentários
As três primeiras formas de Open
fazer uma sessão, criar um comando e executar o comando, vinculando os parâmetros conforme necessário.
A primeira forma de aceita Open
uma cadeia de caracteres de comando Unicode e não tem nenhum valor padrão.
A segunda forma de aceita uma Open
cadeia de caracteres de comando ANSI e nenhum valor padrão (fornecido para compatibilidade com aplicativos ANSI existentes).
A terceira forma de permite Open
que a cadeia de caracteres de comando seja NULL, devido ao tipo int
com um valor padrão null. Ele é fornecido para chamar ou Open(session, NULL);
porque Open(session);
NULL é do tipo int
. Esta versão requer e declara que o parâmetro int
é NULL.
Use a quarta forma de Open
quando você já tiver criado um comando e quiser 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 o comando será criado.
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 do texto do comando. Para obter uma descrição dos dialetos, consulte ICommandText::GetCommandText na referência OLE DB programador.
Valor Retornado
Um HRESULT padrão.
Comentários
A primeira forma de assume uma Create
cadeia de caracteres de comando Unicode. A segunda forma de assume uma Create
cadeia de caracteres de comando ANSI (fornecida para compatibilidade com aplicativos ANSI existentes).
CCommand::CreateCommand
Cria um novo comando.
Sintaxe
HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();
Parâmetros
sessão
[in] Um CSession
objeto a ser associado ao novo comando.
Valor Retornado
Um 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 OLE DB do programador.
Valor Retornado
Um 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 Retornado
Um HRESULT padrão.
Comentários
Esse método envolve o método OLE DB ICommandPrepare::P repare.
CCommand::ReleaseCommand
Libera o acessador de parâmetro e, em seguida, 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 de comando.
Sintaxe
HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
const DBORDINAL* pOrdinals,
const DBPARAMBINDINFO* pParamInfo) throw();
Parâmetros
Consulte ICommandWithParameters::SetParameterInfo na OLE DB do programador.
Valor Retornado
Um HRESULT padrão.
CCommand::Unprepare
Descarta o plano de execução de comando atual.
Sintaxe
HRESULT CCommandBase::Unprepare() throw();
Valor retornado
Um HRESULT padrão.
Comentários
Esse método envolve o OLE DB método ICommandPrepare::Unprepare.
Confira também
Modelos de consumidor OLE DB
referência OLE DB modelos de consumidor