Compartilhar via


Testes de conformidade do OLE DB de passagem

Para tornar provedores mais consistente, Data Access SDK fornece um conjunto de testes de conformidade do OLE DB.Os testes de verificar todos os aspectos do seu provedor e fornecem garantias razoáveis de que as funções de provedor como esperadas.Você pode encontrar os testes de conformidade do OLE DB no Microsoft Data Access SDK.Esta seção se concentra em coisas que você deve fazer para passar nos testes de conformidade.Para obter informações sobre como executar testes de conformidade do OLE DB, consulte o SDK.

Executando os testes de conformidade

No Visual C++ 6.0, os modelos de provedor do OLE DB adicionado um número de funções gancho para permitir que você verifique os valores e propriedades.A maioria dessas funções foram adicionada em resposta aos testes de conformidade.

ObservaçãoObservação

Você precisará adicionar várias funções de validação de seu provedor para passar os testes de conformidade do OLE DB.

Este provedor requer duas rotinas de validação.Rotina primeira, CRowsetImpl::ValidateCommandID, é parte de sua classe de conjunto de linhas.Ele é chamado durante a criação do conjunto de linhas pelos modelos de provedor.O exemplo usa essa rotina para informar os consumidores que não suporta índices.A primeira chamada é CRowsetImpl::ValidateCommandID (Observe que o provedor usa o _RowsetBaseClass typedef adicionado no mapa de interface para CMyProviderRowset em Provedor de suporte para indicadores, portanto, não é necessário digitar a longa linha de argumentos de modelo).Em seguida, retornar DB_E_NOINDEX se o parâmetro de índice não é Nulo (isso indica o consumidor deseja usar um índice em nós).Para obter mais informações sobre IDs de comando, consulte a especificação OLE DB e procure por IOpenRowset::OpenRowset.

O código a seguir é o ValidateCommandID rotina de validação:

/////////////////////////////////////////////////////////////////////
// MyProviderRS.H
// Class: CMyProviderRowset 

HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)
{
   HRESULT hr = _RowsetBaseClass::ValidateCommandID(pTableID, pIndexID);
   if (hr != S_OK)
      return hr;

   if (pIndexID != NULL)
      return DB_E_NOINDEX;    // Doesn't support indexes

   return S_OK;
}

A chamada de modelos de provedor de OnPropertyChanged método sempre que alguém altera uma propriedade no DBPROPSET_ROWSET grupo.Se você deseja manipular propriedades de outros grupos, você os adiciona ao objeto apropriado (ou seja, DBPROPSET_SESSION verificações vá a CMyProviderSession classe).

O código primeiro verifica se a propriedade está vinculada à outra.Se a propriedade encadeada, ele define o DBPROP_BOOKMARKS propriedade como True.Apêndice c da especificação OLE DB contém informações sobre propriedades.Essas informações também informam se a propriedade está encadeada para outro.

Talvez você queira adicionar o IsValidValue rotina em seu código.A chamada de modelos IsValidValue ao tentar definir uma propriedade.Seria substituir esse método se exigem processamento adicional ao definir um valor de propriedade.Você pode ter um destes métodos para cada conjunto de propriedades.

Problemas de Threading

Por padrão, o OLE DB Provider assistente no ATL OLE DB provedor assistente gera código para o provedor executar em um modelo de apartment.Se você tentar executar esse código com os testes de conformidade, inicialmente você obter falhas.Isso é porque o Ltm.exe, a ferramenta usada para executar testes de conformidade do OLE DB, padrões para liberar encadeado.Os padrões de código de OLE DB Provider Assistente para modelo de apartment para desempenho e facilidade de uso.

Para corrigir esse problema, você pode alterar LTM ou alterar o provedor.

Para alterar LTM para executar no apartment thread modo

  1. No menu principal LTM, clique em Ferramentase clique em Opções de.

  2. Sobre o Geral guia, alterar o modelo de threading do Segmentação livre para Threaded Apartment.

Para alterar seu provedor para executar no modo segmentado livre:

  • Em seu projeto de provedor, procurar todas as instâncias de CComSingleThreadModel e substituí-lo com CComMultiThreadModel, que deve ser em seus cabeçalhos de origem, a sessão e o conjunto de linhas de dados.

  • No arquivo. rgs, alterar o modelo de threading do apartamento para ambos os.

  • Siga correta de regras de programação livre threaded programação (isto é, o bloqueio em gravações).

Consulte também

Conceitos

Técnicas avançadas de provedor