Ejemplo UpdatePV: implementa un proveedor OLE DB actualizable

Actualización: noviembre 2007

El ejemplo UpdatePV es un ejemplo de plantillas de proveedor OLE DB que muestra cómo implementar un proveedor actualizable (lectura y escritura). En concreto, muestra cómo realizar inserciones, actualizaciones y eliminaciones inmediatas y diferidas. UpdatePV también muestra cómo utilizar conjuntos de filas de esquema (lo que facilita a algunos asistentes la interacción con un proveedor). UpdatePV también realiza una demostración de la clase IRowsetLocateImpl, como hace MyProv.

En el ejemplo AdvancedPV, encontrará ilustraciones de técnicas adicionales para cargar y guardar datos con un proveedor.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para poder utilizar las características del ejemplo, genérelo, cree un proyecto de consumidor con un descriptor de acceso para el proveedor, y cree una aplicación de consola para obtener acceso a los datos y para poder mostrarlos.

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución UpdatePV.sln.

  2. En el menú Generar, haga clic en Generar solución.

  3. Cree un proyecto de consumidor con el Asistente para proyectos ATL (haga que sea una .dll con atributos).

  4. Agregue un consumidor OLE DB al proyecto de consumidor (en Agregar clase, seleccione Consumidor OLE DB ATL).

  5. En el Asistente para consumidores OLE DB ATL, haga clic en el botón Origen de datos y, en Propiedades de vínculo de datos, seleccione Proveedor UpProv OLE DB. El proveedor UpProv debería registrarse automáticamente cuando genere UpdatePV, pero si no aparece en la lista, ejecute regsvr32.exe sobre UpdatePV.dll.

  6. Haga clic en Next para ir a la ficha Conexión y, a continuación, en Escriba el catálogo inicial para usar, asegúrese de que el nombre de la ruta de acceso a MyData.txt es el correcto.

  7. Haga clic en Aceptar. Aparece el cuadro de diálogo Seleccionar objeto de base de datos, después abra Tablas. Sólo existe un elemento (la ruta de acceso al archivo MyData.txt). Selecciónelo y haga clic en Aceptar. Con ello, regresará al Asistente para consumidores OLE DB ATL.

  8. En el Asistente para consumidores OLE DB ATL, seleccione Tabla, escriba un nombre más corto para la clase (si es necesario), como CMyCons, y haga clic en Finalizar.

  9. Omita el cuadro de diálogo de advertencia de seguridad que aparece presionando Aceptar.

  10. Quite esta línea de CMyCons.h:

    #error Security Issue: The connection string may contain a password
    

    Esta línea evitará la compilación, pero se inserta para avisar del hecho de que (en escenarios reales) se debe proteger la información confidencial.

  11. Genere el proyecto de consumidor haciendo clic con el botón secundario en el nodo del proyecto del Explorador de soluciones y haciendo clic en Generar.

  12. Cree una aplicación de consola. En el archivo .cpp, incluya el encabezado de consumidor y modifique el código como se indica a continuación:

    #include "stdafx.h"
    #include <atldbcli.h>
    #include "..\consumer\cmycons.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
       HRESULT hr = CoInitialize(NULL);
    
       CMyCons c;
    
       hr = c.OpenAll();
       ATLASSERT( SUCCEEDED( hr ) );
    
       hr = c.MoveFirst();
       while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
       {
          printf( "%d %s %s %s %s\n", c.m_Fixed, c.m_Command, c.m_Text, 
             c.m_Command2, c.m_Text2 );
          hr = c.MoveNext();
       }
    
       c.CloseAll();
       CoUninitialize();
       return 0;
    }
    
  13. Coloque un punto de interrupción en la función CoUninitialize; esto hará que la consola permanezca abierta de modo que pueda ver los resultados. Ejecute la aplicación de consola desde el entorno de desarrollo haciendo clic en el botón Iniciar. Debería ver cinco columnas de texto impresas (un índice y cuatro columnas de texto).

Cómo funciona el ejemplo

UpdatePV se genera en la parte superior de las funciones de E/S de archivos en tiempo de ejecución de C. Esto representa un almacén de datos. En concreto, el ejemplo recibe un archivo de texto que consta de un par de elementos de datos y lo convierte en un conjunto de filas. El ejemplo incluye un archivo de texto, MyData.txt, que contiene pares de elementos de datos. No obstante, puede ejecutarlo con cualquier archivo de texto (simplemente convertirá todo en pares de palabras).

UpdatePV realiza sus operaciones de lectura con RUpdateRowset::Execute (rowset.h). Las operaciones de escritura se realizan mediante RUpdateRowset::Execute (rowset.h). Las plantillas de proveedor de OLE DB llaman a estas funciones como parte del funcionamiento normal del proveedor. El ejemplo utiliza las clases IRowsetChangeImpl e IRowsetUpdateImpl de plantillas de proveedor de OLE DB. La clase IRowsetChangeImpl proporciona la capacidad para realizar inserciones, actualizaciones y eliminaciones inmediatas. La clase IRowsetUpdateImpl admite inserciones, actualizaciones y eliminaciones diferidas. La clase IRowsetUpdateImpl hereda de IRowsetChangeImpl. Para obtener más información sobre cómo obtener o establecer datos, lea Crear un proveedor actualizable, en la documentación de Visual C++, y Actualizar datos de conjuntos de filas, en la Referencia del programador de OLE DB de la documentación de Windows SDK.

UpdatePV también proporciona compatibilidad con conjuntos de filas de esquema. Estos conjuntos de filas de esquema permiten a los consumidores averiguar datos sobre un proveedor sin abrir un conjunto de filas o ejecutar un comando. Los asistentes de Visual C++ utilizan los conjuntos de filas de esquema para generar descriptores de acceso en la parte del cliente. Las funciones principales son CUpdateSessionTRSchemaRowset::Execute, CUpdateSessionColSchemaRowset::Execute y CUpdateSessionPTSchemaRowset::Execute. Las tres funciones devuelven información sobre qué tablas utiliza el proveedor, y sobre las columnas y los tipos de datos de las tablas. Para obtener más información acerca de los conjuntos de filas de esquema, vea la interfaz IDBSchemaRowset, en la Referencia del desarrollador de OLE DB.

Palabras clave

El ejemplo muestra el uso de las siguientes interfaces:

IRowsetChange, IRowsetUpdateImpl

El ejemplo realiza una demostración de las siguientes propiedades:

DBPROP_IRowsetChange, DBPROP_IRowsetUpdate

Vea también

Otros recursos

Ejemplos de ATL