Compartilhar via


Consumidor métodos gerados pelo Assistente

O ATL OLE DB consumidor assistente e o Assistente de aplicativos MFC geram determinadas funções das quais você deve estar ciente.Observe que alguns métodos são implementados diferente no atribuído projetos, portanto não há algumas limitações; cada caso é abordado abaixo.Para obter informações sobre como exibir o código injetado, consulte Depurando código introduzido.

  • OpenAll Abre a fonte de dados, conjuntos de linhas e ativa a indicadores se eles estiverem disponível.

  • CloseAll Fecha todos os conjuntos de linhas e libera todas as execuções de comando.

  • OpenRowset é chamado pelo OpenAll para em em aberto o consumidor ou mais conjuntos de linhas.

  • GetRowsetProperties recupera um ponteiro para propriedade do conjunto de linhas definida com quais propriedades podem ser definidas.

  • OpenDataSource Abre a fonte de dados usando a seqüência de inicialização especificado na Propriedades do vínculo de dados caixa de diálogo.

  • CloseDataSource Fecha a fonte de dados de maneira apropriada.

OpenAll e CloseAll

HRESULT OpenAll(); 
void CloseAll();

O exemplo a seguir mostra como você pode telefonar OpenAll e CloseAll Quando você executa o mesmo comando várias vezes. comparar o exemplo de código em CCommand::Close, que mostra uma variação chama Fechar and ReleaseCommand em vez de CloseAll.

int main(int argc, char* argv[])
{
   HRESULT hr;

   hr = CoInitialize(NULL);

   CCustOrdersDetail rs;      // Your CCommand-derived class
   rs.m_OrderID = 10248;      // Open order 10248
   hr = rs.OpenAll();         // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

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


   rs.m_OrderID = 10249;      // Open order 10249 (a new order)
   hr = rs.Open();            // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

   // Close the second command execution;
   // Instead of rs.CloseAll() you could call
   // rs.Close() and rs.ReleaseCommand():
   rs.CloseAll();

   CoUninitialize();
   return 0;
}

Comentários

Observe que, se você definir um HasBookmark método, o OpenAll código define a propriedade DBPROP_IRowsetLocate; Certifique-se de que você fazer isso somente se o provedor oferece suporte a essa propriedade.

OpenRowset

// OLE DB Template version: 
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);

OpenAll chama esse método para em em aberto o conjunto de linhas ou conjuntos de linhas no consumidor.Normalmente, você não precisa chamar OpenRowset a menos que você queira trabalhar com conjuntos de vários dados fontes/sessões/linhas. OpenRowset é declarado no arquivo de cabeçalho de classe de comando ou de tabela:

// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
   HRESULT hr = Open(m_session, NULL, pPropSet);
   #ifdef _DEBUG
   if(FAILED(hr))
      AtlTraceErrorRecords(hr);
   #endif
   return hr;
}

Os atributos implementam este método de maneira diferente.Esta versão usa um objeto de sessão e uma seqüência de comando padrão é a seqüência de comandos especificada em db_command, embora você pode passar um diferente.Observe que, se você definir um HasBookmark método, o OpenRowset código define a propriedade DBPROP_IRowsetLocate; Certifique-se de que você fazer isso somente se o provedor oferece suporte a essa propriedade.

// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand=NULL)
{

   DBPROPSET *pPropSet = NULL;
   CDBPropSet propset(DBPROPSET_ROWSET);
   __if_exists(HasBookmark)

   {
      propset.AddProperty(DBPROP_IRowsetLocate, true);
      pPropSet= &propset;
      }
...
}

GetRowsetProperties

void GetRowsetProperties(CDBPropSet* pPropSet);

Este método recupera um ponteiro para o conjunto de propriedades do conjunto de linhas; você pode usar esse ponteiro para definir propriedades sistema autônomo DBPROP_IRowsetChange.GetRowsetProperties é usado na classe de registro de usuário da seguinte maneira. Você pode modificar este código para definir propriedades do conjunto de linhas adicionais:

void GetRowsetProperties(CDBPropSet* pPropSet)
{
   pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
}

Comentários

Você não deve definir um global GetRowsetProperties método porque ele pode entrar em conflito com aquele definido pelo assistente. Observe que esse é um método gerado pelo assistente que você obtém com projetos com modelo e atribuídos; os atributos não injetar esse código.

OpenDataSource e CloseDataSource

HRESULT OpenDataSource(); 
void CloseDataSource();

Comentários

O assistente define os métodos OpenDataSource e CloseDataSource; OpenDataSource chamadas CDataSource::OpenFromInitializationString.

Consulte também

Conceitos

Criação de um consumidor de BD OLE DB usando um assistente