Testes de conformidade do OLE DB passagem
Para tornar provedores mais consistente, dados acesso SDK fornece um conjunto de testes de conformidade do OLE DB.sistema autônomo testes verificar todos sistema autônomo aspectos do seu provedor e fornecem garantias razoáveis de que seu provedor funciona sistema autônomo esperada.Você pode encontrar os testes de conformidade do OLE DB no Microsoft dados acesso SDK.Esta seção concentra-se em coisas que você deve fazer para passar os testes de conformidade.Para obter informações sobre como executar os testes de conformidade do OLE DB, consulte o SDK.
Executando os testes de conformidade
No Visual C++ 6.0, o provedor OLE DB modelos adicionados a um número de interceptação de funções para que você possa verificar valores e propriedades.A maioria dessas funções foram adicionada em resposta a testes de conformidade.
Observaçã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.O primeiro de rotina, CRowsetImpl::ValidateCommandID, faz parte de sua classe de conjunto de linhas. Ele é chamado durante a criação do conjunto de linhas pelos modelos do provedor.O exemplo usa essa rotina para informar os consumidores que ele não oferece suporte a índices.A primeira telefonar é CRowsetImpl::ValidateCommandID (Observe que o provedor usa o _RowsetBaseClass typedef adicionado ao MAP da interface para CMyProviderRowset em Provedor de suporte para indicadores, para que você não precise digitar essa linha longa de argumentos de modelo).Em seguida, retornar DB_E_NOINDEX se o parâmetro de índice não for NULO (isso indica que o consumidor quiser 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;
}
Os modelos de provedor telefonar o OnPropertyChanged método sempre que alguém altera uma propriedade no DBPROPSET_ROWSET agrupar.Se você deseja manipular propriedades de outros grupos, você adicioná-los para o objeto apropriado (ou seja, DBPROPSET_SESSION verificações vá no CMyProviderSession classe).
O código primeiro verifica se a propriedade é vinculada a outro.Se a propriedade está sendo encadeada, ele define o DBPROP_BOOKMARKS 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.
Também convém adicionar o IsValidValue rotina ao seu código. Os modelos de chamar IsValidValue ao tentar conjunto uma propriedade. Você deve substituir esse método se você precisar de processamento adicional ao definir um valor da propriedade.Você pode ter um destes métodos para cada conjunto de propriedades.
Problemas de Threading
Por padrão, o provedor OLE DB assistente no assistente ATL provedor OLE DB para gera código para o provedor ser executado em um modelo de apartment.Se você tentar executar esse código com os testes de conformidade, você obterá inicialmente falhas.Isso está porque Ltm.exe, a ferramenta usada para executar os testes de conformidade do OLE DB, padrão é disponível de encadeamentos.O código do OLE DB provedor assistente padrão do modelo de apartment de desempenho e facilidade de uso.
Para corrigir esse problema, você pode alterar LTM ou alterar o provedor.
Para alterar LTM para executar no apartment segmentação modo
No menu principal LTM, clicar Ferramentase, em seguida, clicar Opções.
Sobre o Geral guia, alterar o modelo de threading de Thread disponível to Thread Apartment.
Para alterar o seu provedor para ser executado no modo segmentado disponível:
No seu projeto de provedor, procurar por todas as ocorrências de CComSingleThreadModel e substituí-la pela CComMultiThreadModel, que deve estar em seus cabeçalhos de fonte, sessão e conjunto de linhas de dados.
No seu arquivo .rgs, altere o modelo de threading de apartment to Ambos.
Execute regras de programação gratuitamente encadeados programação (ou seja, o bloquear em gravações) correto.