Testando o provedor de somente leitura

Para testar um provedor, você precisa de um consumidor.É útil se o consumidor pode corresponder ao com o provedor.Os modelos de consumidor OLEDB são um wrapper estreito ao redor do OLE DB e coincidirem com os objetos COM do provedor.Como a fonte é fornecida com os modelos do consumidor, é fácil depurar um provedor com eles.Os modelos de consumidor também são uma forma muito pequena e rápida para desenvolver aplicativos do consumidor.

O exemplo neste tópico cria um aplicativo do MFC Application assistente padrão para um consumidor de teste.O aplicativo de teste é uma caixa de diálogo simples com código de modelo de consumidor OLE DB adicionado.

Para criar o aplicativo de teste

  1. Sobre o Arquivo menu, clicar Newe, em seguida, clicar Projeto.

  2. No painel projeto Types, selecionar o Projetos do Visual C++ pasta.No painel Templates, selecionar Aplicativo MFC.

  3. Para o nome do projeto, digite TestProve, em seguida, clicar OK.

    MFC aplicativo assistente aparece.

  4. Sobre o Tipo de aplicativo página, selecionar Caixa de diálogo com base em.

  5. Sobre o Recursos avançados página, selecionar Automaçãoe, em seguida, clicar Concluir.

Observação:

O aplicativo não requer suporte a automação se você adicionar Em coInitialize in CTestProvApp::InitInstance.

Você pode exibir e edição a caixa de diálogo TestProv (IDD_TESTPROV_DIALOG) selecionando-a na exibição de recurso.Coloque dois lista caixas, uma para cada seqüência de caracteres no conjunto de linhas, na caixa de diálogo.Desativar a propriedade de classificar para ambos lista caixas pressionando ALT + ENTER quando um lista estiver selecionada, clicando no Estilos guia e limpando a classificar a caixa de seleção.Além disso, faça um Executar botão na caixa de diálogo para buscar o arquivo.A caixa de diálogo TestProv concluída deve ter duas caixas de listagem rotuladas "String 1" e "Seqüência de 2", respectivamente; ele também temOK, Cancelar, and Executar botões.

Abra o arquivo de cabeçalho para a classe de caixa de diálogo (no TestProvDlg.h neste caso).Adicione o seguinte código ao arquivo de cabeçalho (fora de qualquer declaração de classe):

////////////////////////////////////////////////////////////////////////
// TestProvDlg.h

class CProvider 
{
// Attributes
public:
   char   szField1[16];
   char   szField2[16];

   // Binding Maps
BEGIN_COLUMN_MAP(CProvider)
   COLUMN_ENTRY(1, szField1)
   COLUMN_ENTRY(2, szField2)
END_COLUMN_MAP()
};

O código representa um registro de usuário que define quais colunas serão no conjunto de linhas.Quando o cliente chama IAccessor::CreateAccessor, ele utiliza essas entradas para especificar as colunas que deseja BIND.Os modelos de consumidor OLE DB também permitem que você vincule colunas dinamicamente.As macros COLUMN_ENTRY são a versão cliente do macros PROVIDER_COLUMN_ENTRY.Duas macros COLUMN_ENTRY Especifica ordinal, membro de tipo, comprimento e dados para as duas seqüências de caracteres.

Adicionar uma função de manipulador para o Executar botão pressionando CTRL e clicando duas vezes o Executar botão.Coloque o código a seguir na função:

///////////////////////////////////////////////////////////////////////
// TestProvDlg.cpp

void CtestProvDlg::OnRun()
{
   CCommand<CAccessor<CProvider> > table;
   CDataSource source;
   CSession   session;

   if (source.Open("MyProvider.MyProvider.1", NULL) != S_OK)
      return;

   if (session.Open(source) != S_OK)
      return;

   if (table.Open(session, _T("c:\\samples\\myprov\\myData.txt")) != S_OK)
      return;

   while (table.MoveNext() == S_OK)
   {
      m_ctlString1.AddString(table.szField1);
      m_ctlString2.AddString(table.szField2);
   }
}

The CCommand, CDataSource, e CSession todas as classes pertencem a modelos de consumidor OLE DB. Cada classe imita um objeto COM o provedor.The CCommand objeto leva a CProvider classe, declarado no arquivo de cabeçalho, sistema autônomo um parâmetro de modelo. The CProvider parâmetro representa ligações que você usa para acessar os dados do provedor. Aqui está o Open código para a fonte de dados, a sessão e o comando:

   if (source.Open("MyProvider.MyProvider.1", NULL) != S_OK)
      return;

   if (session.Open(source) != S_OK)
      return;

   if (table.Open(session, _T("c:\\samples\\myprov\\myData.txt")) != S_OK)
      return;

As linhas para em em aberto cada uma das classes de criam cada objeto COM no provedor.Para localizar o provedor, use o ProgID do provedor.Você pode obter o ProgID do registro do sistema ou examinando o arquivo MyProvider.rgs (em em aberto diretório e procure a chave ProgID do provedor).

O arquivo MyData.txt está incluído com o exemplo MyProv.Para criar um arquivo de sua preferência, use um editor e digite um número par de seqüências de caracteres, pressionando ENTER entre cada cadeia de caracteres.Altere o nome de caminho, se você mover o arquivo.

Transmite a seqüência de caracteres "c:\\Exemplos\\myprov\\MyData.txt" notable.Open linha. Se você entrar no Open telefonar, você verá que essa seqüência de caracteres é transmitida para o SetCommandText método no provedor. Observe que o ICommandText::Execute método usado dessa seqüência.

Para buscar os dados, telefonar MoveNext na tabela. MoveNext chamadas a IRowset::GetNextRows, GetRowCount, e GetData funções. Quando não há mais nenhuma linha (ou seja, a posição corrente no conjunto de linhas é maior que GetRowCount), o loop é encerrado:

   while (table.MoveNext() == S_OK)
   {
      m_ctlString1.AddString(table.szField1);
      m_ctlString2.AddString(table.szField2);
   }

Observe que, quando não existem mais linhas, provedores de retornam DB_S_ENDOFROWSET.The DB_S_ENDOFROWSETvalor de não é um erro.Você sempre deve verificar S_OK Para cancelar um loop de busca de dados e não usar a macro teve êxito.

Agora será capaz de criar e testar o programa.

Consulte também

Referência

Aprimorando o provedor de somente leitura Simple