Obtener acceso a datos XML
Actualización: noviembre 2007
Existen dos métodos independientes para recuperar datos XML de un origen de datos: mediante CStreamRowset o CXMLAccessor.
Funcionalidad |
CStreamRowset |
CXMLAccessor |
---|---|---|
Volumen de datos transferido |
Recupera datos de todas las columnas y filas a la vez. |
Recupera datos de todas las columnas, pero sólo una fila a la vez. Para desplazarse por las filas se requieren métodos como MoveNext. |
Dar formato a la cadena |
SQL Server da formato a la cadena XML y la envía al consumidor. |
Recupera datos del conjunto de filas en su formato nativo (solicitudes que el proveedor envía como cadenas Unicode) y a continuación genera la cadena que contiene los datos en formato XML. |
Control sobre el formato |
Existe cierto control sobre el formato de la cadena XML al establecer algunas propiedades específicas de SQL Server 2000. |
No se dispone de control sobre el formato de la cadena XML generada. |
Aunque CStreamRowset proporciona una eficacia más amplia para recuperar datos en formato XML, sólo se utiliza en SQL Server 2000.
Recuperar datos XML mediante CStreamRowset
Se especifica CStreamRowset como tipo de conjunto de filas en la declaración de CCommand o CTable. Se puede utilizar con nuestro descriptor de acceso personal o sin descriptor de acceso, como por ejemplo:
CCommand< CAccessor<CMyAccessor>, CStreamRowset > myCmd;
O bien
CCommand< CNoAccessor, CStreamRowset > myCmd;
Normalmente, si se llama a CCommand::Open (por ejemplo, especificando CRowset como la clase TRowset), se obtiene un puntero IRowset. ICommand::Execute devuelve un puntero IRowset, que se almacena en el miembro m_spRowset del objeto CRowset. Los métodos como MoveFirst, MoveNext y GetData usan ese puntero para recuperar los datos.
En contraste, si se llama a CCommand::Open (pero se especifica CStreamRowset como la clase TRowset), ICommand::Execute devuelve un puntero ISequentialStream, que se almacena en el miembro de datos m_spStream de CStreamRowset. Después, se puede usar el método Read para recuperar los datos (la cadena Unicode) en formato XML. Por ejemplo:
myCmd.m_spStream->Read()
SQL Server 2000 aplica el formato XML y devuelve todas las columnas y filas del conjunto de filas como una sola cadena XML.
Para consultar un ejemplo en el que se utiliza el método Read, vea "Agregar compatibilidad con XML al consumidor" en Implementar un consumidor sencillo.
Nota: |
---|
La compatibilidad con XML mediante CStreamRowset sólo funciona con SQL Server 2000 y requiere el uso del proveedor OLE DB para SQL Server 2000 (instalado con MDAC). |
Recuperar datos XML mediante CXMLAccessor
CXMLAccessor permite el acceso a datos desde un origen de datos como cadena de datos cuando no se conoce el esquema del almacén de datos. CXMLAccessor funciona como CDynamicStringAccessorW salvo que el primero convierte todos los datos a los que se tiene acceso desde el almacén de datos como datos con formato XML (con etiquetas). Los nombres de etiqueta XML coinciden con los nombres de columna del almacén de datos en la medida de lo posible.
CXMLAccessor se utiliza como las demás clases de descriptor de acceso, pasándola como un parámetro de plantilla a CCommand o CTable:
CTable<CXMLAccessor, CRowset> rs;
Utilice GetXMLRowData para recuperar datos de la tabla, una fila cada vez, y métodos como MoveNext para desplazarse por las filas, 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();
}
GetXMLColumnData se puede usar para recuperar la información de columnas (tipos de datos) como datos de cadena con formato XML.