Testes de conformidade do OLE DB de passagem
Para tornar os provedores mais consistente, o Data Access SDK fornece um conjunto de testes de conformidade do OLE DB. Os testes verificar todos os aspectos do seu provedor e fornecem garantias razoáveis de que suas funções de provedor como esperadas. Você pode encontrar os testes de conformidade do OLE DB no Microsoft Data Access SDK. Esta seção concentra-se em coisas que você deve fazer para passar nos testes de conformidade. Para obter informações sobre como executar os testes de conformidade do OLE DB, consulte o SDK.
Execução dos testes de conformidade
No Visual C++ 6.0, os modelos de provedor do OLE DB adicionado a um número de funções de gancho para permitir que você verifique os valores e propriedades. A maioria dessas funções foram adicionada em resposta a testes de conformidade.
Observação |
---|
Você precisa 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. A rotina de primeira, CRowsetImpl::ValidateCommandID, que é parte da sua turma 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 para que ele não oferece suporte a índices. A primeira chamada é CRowsetImpl::ValidateCommandID (Observe que o provedor usa a _RowsetBaseClass typedef adicionado no mapa de interface para CMyProviderRowset em Provedor de suporte para indicadores, portanto, você não precisa digitar essa linha longa de argumentos de modelo). Em seguida, retornar DB_E_NOINDEX se o parâmetro de índice não é Nulo (isso indica o consumidor quer 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 a 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 para outros grupos, adicioná-los ao objeto apropriado (ou seja, DBPROPSET_SESSION verificações ir a CMyProviderSession classe).
O código primeiro verifica se a propriedade está vinculada à outra. Se a propriedade encadeada, ele define o DBPROP_BOOKMARKS a propriedade como True. Apêndice c da especificação do 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. Você seria substituir este método se você precisar de 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 assistente ATL OLE DB Provider para gera código para o provedor executar em um modelo de apartment. Se você tentar executar esse código com os testes de conformidade, você obtém inicialmente a falhas. Isso é porque os padrões de Ltm.exe, a ferramenta usada para executar os testes de conformidade do OLE DB, para liberar encadeado. O código do assistente OLE DB para provedor padrão do modelo de compartimento de desempenho e facilidade de uso.
Para corrigir esse problema, você pode alterar LTM ou alterar o provedor.
Para alterar LTM para executar o apartamento encadeado modo
No menu principal do LTM, clique em Ferramentase em seguida, clique em Opções.
Sobre o Geral guia, alterar o modelo de threading do Segmentação livre para Segmentado em compartimentos.
Para alterar o seu provedor para executar no modo de segmento livre:
No seu projeto de provedor, procurar por todas as instâncias de CComSingleThreadModel e substituí-lo com CComMultiThreadModel, que deve ser em sua fonte de dados, sessão e cabeçalhos de linhas.
No seu arquivo. rgs, alterar o modelo de threading do Apartment para os.
Siga correto de regras de programação gratuitamente encadeado programação (ou seja, o bloqueio em gravações).