Compartir a través de


Obtener acceso a datos XML

Hay dos métodos independientes para recuperar datos XML de un origen de datos: uno usa CStreamRowset y el otro usa CXMLAccessor.

Funcionalidad CStreamRowset CXMLAccessor
Cantidad de datos transferidos Recupera datos de todas las columnas y filas a la vez. Recupera datos de todas las columnas, pero solo una fila a la vez. Debe navegar por filas mediante métodos como MoveNext.
Aplicación de formato a la cadena SQL Server da formato a la cadena XML y la envía al consumidor. Recupera los datos del conjunto de filas en su formato nativo (solicita que el proveedor lo envíe como cadenas Unicode) y, a continuación, compila la cadena que contiene los datos en formato XML.
Control sobre el formato Tiene algún nivel de control sobre cómo se aplica formato a la cadena XML estableciendo algunas propiedades específicas de SQL Server 2000. No tiene control sobre el formato de la cadena XML generada.

Aunque CStreamRowset proporciona una manera más eficaz de recuperar datos en formato XML, solo es compatible con SQL Server 2000.

Recuperación de datos XML mediante CStreamRowset

Especifique CStreamRowset como tipo de conjunto de filas en la declaración CCommand o CTable. Puede usarlo con su propio descriptor de acceso o sin descriptor de acceso, por ejemplo:

CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;

O bien

CCommand<CNoAccessor, CStreamRowset> myCmd;

Normalmente, cuando se llama a CCommand::Open (especificando, por ejemplo, CRowset como la clase TRowset), obtiene un puntero IRowset. ICommand::Execute devuelve un puntero IRowset, que se almacena en el miembro m_spRowset del objeto CRowset. Métodos como MoveFirst, MoveNext y GetData usan ese puntero para recuperar los datos.

Por el contrario, cuando se llama a CCommand::Open (pero se especifica CStreamRowset como clase TRowset), ICommand::Execute devuelve un puntero ISequentialStream, que se almacena en el m_spStream miembro de datos de CStreamRowset. A continuación, use el método Read para recuperar los datos (cadena Unicode) en formato XML. Por ejemplo:

myCmd.m_spStream->Read()

SQL Server 2000 aplica el formato XML y devuelve todas las columnas y todas las filas del conjunto de filas como una cadena XML.

Para obtener un ejemplo con el método Read, vea Adición de compatibilidad con XML en el consumidor en Implementar un consumidor sencillo.

Nota:

La compatibilidad con XML mediante CStreamRowset solo funciona con SQL Server 2000 y requiere que tenga el proveedor OLE DB para SQL Server 2000 (instalado con MDAC).

Recuperación de datos XML mediante CXMLAccessor

CXMLAccessor permite acceder a los datos de un origen de datos como datos de cadena cuando no tiene conocimiento del esquema del almacén de datos. CXMLAccessor funciona como CDynamicStringAccessorW salvo que el primero convierte todos los datos a los que se accede desde el almacén de datos como datos con formato XML (etiquetados). Los nombres de las etiquetas XML coinciden al máximo con los nombres de las columnas del almacén de datos.

Use CXMLAccessor como haría con cualquier otra clase de descriptor de acceso, pasándola como parámetro de plantilla a CCommand o CTable:

CTable<CXMLAccessor, CRowset> rs;

Utilice GetXMLRowData para recuperar los datos de la tabla fila a fila, y navegue por las filas utilizando métodos como MoveNext, por ejemplo:

// Open data source, session, and rowset
hr = rs.MoveFirst();

while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
    CStringW strRowData;
    myCmd.GetXMLRowData(strRowData);

    printf_s( "%S\n", strRowData );

    hr = rs.MoveNext();
}

Puede usar GetXMLColumnData para recuperar la información de columna (tipo de datos) como datos de cadena con formato XML.

Consulte también

Usar descriptores de acceso