Superar las pruebas de conformidad de OLE DB
Para que los proveedores sean más coherentes, el SDK de Data Access proporciona un conjunto de pruebas de conformidad de OLE DB. Las pruebas comprueban todos los aspectos de su proveedor y le dan una garantía razonable de que su proveedor funciona según lo previsto. Puede encontrar las pruebas de conformidad de OLE DB en el SDK de Microsoft Data Access. Esta sección se centra en las cosas que debe hacer para pasar las pruebas de conformidad. Para obtener información sobre cómo ejecutar las pruebas de conformidad de OLE DB, consulte el SDK.
Ejecución de las pruebas de conformidad
En Visual C++ 6.0, las plantillas de proveedor OLE DB agregaron una serie de funciones de enlace para permitirle comprobar valores y propiedades. La mayoría de estas funciones se agregaron en respuesta a las pruebas de conformidad.
Nota:
Debe agregar varias funciones de validación para que el proveedor supere las pruebas de conformidad de OLE DB.
Este proveedor requiere dos rutinas de validación. La primera rutina, CRowsetImpl::ValidateCommandID
, forma parte de la clase del conjunto de filas. Se le llama durante la creación del conjunto de filas mediante las plantillas de proveedor. En el ejemplo se usa esta rutina para indicar a los consumidores que no admiten índices. La primera llamada es a CRowsetImpl::ValidateCommandID
(tenga en cuenta que el proveedor usa la definición de tipo _RowsetBaseClass
agregada en la asignación de interfaz para CCustomRowset
en Compatibilidad del proveedor con los marcadores, por lo que no tiene que escribir esa línea larga de argumentos de plantilla). A continuación, devuelva DB_E_NOINDEX si el parámetro de índice no es NULL (esto indica que el consumidor quiere usar un índice en nosotros). Para obtener más información sobre los identificadores de comando, vea la especificación OLE DB y busque IOpenRowset::OpenRowset
.
El código siguiente es la rutina de validación 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;
}
Las plantillas de proveedor llaman al método OnPropertyChanged
cada vez que alguien cambia una propiedad en el grupo DBPROPSET_ROWSET. Si desea controlar las propiedades de otros grupos, agréguelas al objeto adecuado (es decir, las comprobaciones DBPROPSET_SESSION van en la clase CCustomSession
).
En primer lugar, el código comprueba si la propiedad está vinculada a otra. Si la propiedad se está encadenando, establece la propiedad DBPROP_BOOKMARKS en True
. El apéndice C de la especificación OLE DB contiene información sobre las propiedades. Esta información también indica si la propiedad está encadenada a otra.
También puede agregar la rutina IsValidValue
al código. Las plantillas llaman a IsValidValue
al intentar establecer una propiedad. Invalidaría este método si necesita procesamiento adicional al establecer un valor de propiedad. Puede tener uno de estos métodos para cada conjunto de propiedades.