Superamento dei test di conformità OLE DB
Per rendere i provider più coerenti, Data Access SDK fornisce un set di test di conformità OLE DB. I test controllano tutti gli aspetti del provider e offrono una garanzia ragionevole che il provider funzioni come previsto. È possibile trovare i test di conformità OLE DB in Microsoft Data Access SDK. Questa sezione è incentrata sulle operazioni da eseguire per superare i test di conformità. Per informazioni sull'esecuzione dei test di conformità OLE DB, vedere l'SDK.
Esecuzione dei test di conformità
In Visual C++ 6.0, i modelli di provider OLE DB hanno aggiunto una serie di funzioni di hook per consentire di controllare valori e proprietà. La maggior parte di queste funzioni è stata aggiunta in risposta ai test di conformità.
Nota
È necessario aggiungere diverse funzioni di convalida per il provider per superare i test di conformità OLE DB.
Questo provider richiede due routine di convalida. La prima routine, CRowsetImpl::ValidateCommandID
, fa parte della classe del set di righe. Viene chiamato durante la creazione del set di righe dai modelli di provider. L'esempio usa questa routine per indicare ai consumer che non supporta gli indici. La prima chiamata è a CRowsetImpl::ValidateCommandID
(si noti che il provider usa il _RowsetBaseClass
typedef aggiunto nella mappa dell'interfaccia per CCustomRowset
in Supporto provider per segnalibri, quindi non è necessario digitare quella lunga riga di argomenti del modello). Restituire quindi DB_E_NOINDEX se il parametro dell'indice non è NULL (indica che il consumer vuole usare un indice su di noi). Per altre informazioni sugli ID comando, vedere la specifica OLE DB e cercare IOpenRowset::OpenRowset
.
Il codice seguente è la routine di ValidateCommandID
convalida:
/////////////////////////////////////////////////////////////////////
// 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;
}
I modelli di provider chiamano il OnPropertyChanged
metodo ogni volta che un utente modifica una proprietà nel gruppo DBPROPSET_ROWSET. Se si desidera gestire le proprietà per altri gruppi, aggiungerle all'oggetto appropriato, ovvero DBPROPSET_SESSION i controlli vengono inseriti nella CCustomSession
classe .
Il codice verifica innanzitutto se la proprietà è collegata a un'altra. Se la proprietà viene concatenata, imposta la proprietà DBPROP_BOOKMARKS su True
. L'appendice C della specifica OLE DB contiene informazioni sulle proprietà. Queste informazioni indicano anche se la proprietà è concatenata a un'altra.
È anche possibile aggiungere la IsValidValue
routine al codice. I modelli chiamano IsValidValue
quando si tenta di impostare una proprietà. Se si richiede un'elaborazione aggiuntiva durante l'impostazione di un valore di proprietà, è necessario eseguire l'override di questo metodo. È possibile avere uno di questi metodi per ogni set di proprietà.