Přístup k datům XML
Existují dvě samostatné metody načítání dat XML ze zdroje dat: jedna používá CStreamRowset a druhá používá CXMLAccessor.
Funkce |
CStreamRowset |
CXMLAccessor |
---|---|---|
Množství přenesených dat |
Načte data ze všech sloupců a řádků najednou. |
Načte data ze všech sloupců, ale současně pouze z jednoho řádku. Musíte procházet řádky pomocí metod, jako je například MoveNext. |
Formátování řetězce |
SQL Server formátuje řetězec XML a odesílá jej příjemci. |
Načítá data sady řádků v nativním formátu (požaduje, aby je poskytovatel odesílal jako řetězce Unicode) a potom vytvoří řetězec, obsahující data ve formátu XML. |
Kontrola nad formátováním |
Máte určitou úroveň kontroly nad tím, jak je řetězec XML formátován, nastavením některých vlastností, specifických pro SQL Server 2000. |
Nemáte žádnou kontrolu nad formátem generovaného řetězce XML. |
Zatímco CStreamRowset poskytuje celkově efektivnější způsob načítání dat ve formátu XML, je podporován pouze serverem SQL Server 2000.
Načítání dat jazyka XML pomocí CStreamRowset
Určíte CStreamRowset jako typ sady řádků ve vaší deklaraci CCommand nebo CTable. Můžete jej použít s vlastním přistupujícím objektem nebo s žádným přistupujícím objektem, například:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-nebo-
CCommand<CNoAccessor, CStreamRowset> myCmd;
Obyčejně, když zavoláte CCommand::Open (s určením, například, CRowset jako třídy TRowset), obdržíte ukazatel IRowset. ICommand::Execute vrací ukazatel IRowset, který je uložen ve členu m_spRowset objektu CRowset. Metody, jako například MoveFirst, MoveNext a GetData používají tento ukazatel pro načítání dat.
Naopak při volání CCommand::Open (ale určení CStreamRowset jako třídy TRowset), ICommand::Execute vrací ukazatel ISequentialStream, který je uložen v datovém členu m_spStream CStreamRowset. Poté použijete metodu Read pro načtení dat (řetězce Unicode) ve formátu XML. Příklad:
myCmd.m_spStream->Read()
SQL Server 2000 provádí formátování XML a vrací všechny sloupce a všechny řádky sady řádků jako jeden řetězec XML.
Pro příklad použití metody Read si prohlédněte "Přidání podpory XML příjemci" v Implementace jednoduchého příjemce.
Poznámka
Podpora XML pomocí CStreamRowset pracuje pouze se serverem SQL Server 2000 a vyžaduje, abyste měli zprostředkovatele OLE DB pro SQL Server 2000 (nainstalován s MDAC).
Načítání dat XML pomocí CXMLAccessor
CXMLAccessor umožňuje přístup k datům ze zdroje dat jako řetězcovým datům, nemáte-li žádnou znalost schématu úložiště dat. CXMLAccessor funguje jako CDynamicStringAccessorW kromě toho, že první jmenovaný převádí všechna data z úložiště dat na data, zformátovaná jako XML (značkovaná). Názvy značek XML co nejvíce odpovídají názvům sloupců úložiště dat.
Použijte CXMLAccessor stejně jako jakoukoli jinou přístupovou třídu, jejím předáním jako parametr šablony pro CCommand nebo CTable:
CTable<CXMLAccessor, CRowset> rs;
Použijte GetXMLRowData k načtení dat z jednoho řádku tabulky a procházejte řádky pomocí metod, jako je MoveNext, například:
// 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();
}
Můžete použít GetXMLColumnData pro načtení informací o sloupci (datovém typu) jako data řetězce ve formátu XML.