Passando testes de conformidade de banco de dados OLE
Para tornar os provedores mais consistentes, o SDK do Acesso a Dados fornece um conjunto de testes de conformidade OLE DB. Os testes verificam todos os aspectos do seu provedor e fornecem garantia razoável de que o provedor funciona conforme o esperado. Você pode encontrar os testes de conformidade do OLE DB no SDK de Acesso a Dados da Microsoft. Esta seção se concentra 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, confira o SDK.
Executando os testes de conformidade
No Visual C++ 6.0, os modelos de provedor OLE DB adicionaram várias funções de conexão para permitir que você verificasse valores e propriedades. A maioria dessas funções foi adicionada em resposta aos testes de conformidade.
Observação
Você precisa adicionar várias funções de validação para seu provedor passar nos testes de conformidade do OLE DB.
Esse provedor exige duas rotinas de validação. A primeira rotina, CRowsetImpl::ValidateCommandID
, faz parte da 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 aos consumidores que ele não dá suporte a índices. A primeira chamada é para CRowsetImpl::ValidateCommandID
(observe que o provedor usa o typedef _RowsetBaseClass
adicionado no mapa de interface para CCustomRowset
no Suporte do Provedor para Indicadores, para que você não precise digitar essa longa linha de argumentos de modelo). Em seguida, retorne DB_E_NOINDEX se o parâmetro de índice não for NULL (isso indica que o consumidor deseja usar um índice em nós). Para obter mais informações sobre IDs de comando, confira a especificação do OLE DB e procure IOpenRowset::OpenRowset
.
O seguinte código é a rotina de validação ValidateCommandID
:
/////////////////////////////////////////////////////////////////////
// CustomRS.H
// Class: CCustomRowset
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 chamam o método OnPropertyChanged
sempre que alguém altera uma propriedade no grupo DBPROPSET_ROWSET. Se você quiser manipular propriedades para outros grupos, adicione-as ao objeto apropriado (ou seja, as verificações DBPROPSET_SESSION vão para a classe CCustomSession
).
O código verifica primeiro se a propriedade está vinculada a outra. Se a propriedade estiver sendo encadeada, ele definirá a propriedade DBPROP_BOOKMARKS como True
. O 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 a outra.
Talvez você também queira adicionar a rotina IsValidValue
ao seu código. Os modelos chamam IsValidValue
ao tentar definir uma propriedade. Você substituiria esse método se precisasse de processamento adicional ao definir um valor de propriedade. Você pode ter um desses métodos para cada conjunto de propriedades.