Zugreifen auf XML-Daten
Es gibt zwei separate Methoden zum Abrufen von XML-Daten aus einer Datenquelle: eine verwendet CStreamRowset und die andere verwendet CXMLAccessor.
Funktionalität | CStreamRowset | CXMLAccessor |
---|---|---|
Übertragene Datenmenge | Ruft Daten aus allen Spalten und Zeilen gleichzeitig ab. | Ruft Daten aus allen Spalten, aber jeweils nur einer Zeile ab. Sie müssen zeilenweise mithilfe von Methoden wie MoveNext . |
Formatieren der Zeichenfolge | SQL Server formatiert die XML-Zeichenfolge und sendet sie an den Consumer. | Ruft Rowsetdaten im systemeigenen Format ab (Anforderungen, die der Anbieter als Unicode-Zeichenfolgen sendet) und erstellt dann die Zeichenfolge, die die Daten im XML-Format enthält. |
Kontrolle über formatierung | Sie haben eine gewisse Kontrolle darüber, wie die XML-Zeichenfolge formatiert wird, indem Sie einige SQL Server 2000-spezifische Eigenschaften festlegen. | Sie haben keine Kontrolle über das Format der generierten XML-Zeichenfolge. |
Bietet zwar CStreamRowset
eine effizientere Möglichkeit zum Abrufen von Daten im XML-Format, wird jedoch nur von SQL Server 2000 unterstützt.
Abrufen von XML-Daten mit CStreamRowset
Sie geben CStreamRowset als Rowsettyp in Ihrer CCommand
oder CTable
Deklaration an. Sie können es beispielsweise mit Ihrem eigenen Accessor oder ohne Accessor verwenden:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
Oder
CCommand<CNoAccessor, CStreamRowset> myCmd;
Normalerweise wird beim Aufrufen CCommand::Open
(z CRowset
. B. als TRowset
Klasse) ein IRowset
Zeiger angezeigt. ICommand::Execute
gibt einen IRowset
Zeiger zurück, der m_spRowset
im Element des CRowset
Objekts gespeichert ist. Methoden wie MoveFirst
, MoveNext
und GetData
verwenden Sie diesen Zeiger, um die Daten abzurufen.
Wenn Sie dagegen aufrufen CCommand::Open
(aber als TRowset
Klasse angebenCStreamRowset
), ICommand::Execute
wird ein ISequentialStream
Zeiger zurückgegeben, der m_spStream
im Datenmememm von CStreamRowset gespeichert ist. Anschließend verwenden Sie die Read
Methode, um die Daten (Unicode-Zeichenfolge) im XML-Format abzurufen. Zum Beispiel:
myCmd.m_spStream->Read()
SQL Server 2000 führt die XML-Formatierung aus und gibt alle Spalten und alle Zeilen des Rowsets als eine XML-Zeichenfolge zurück.
Ein Beispiel für die Verwendung der Read
Methode finden Sie unter Hinzufügen der XML-Unterstützung zum Consumer in der Implementierung eines einfachen Consumers.
Hinweis
DIE XML-Unterstützung mit CStreamRowset
SQL Server 2000 funktioniert nur mit SQL Server 2000 und erfordert, dass Sie über den OLE DB-Anbieter für SQL Server 2000 verfügen (installiert mit MDAC).
Abrufen von XML-Daten mit CXMLAccessor
Mit CXMLAccessor können Sie auf Daten aus einer Datenquelle als Zeichenfolgendaten zugreifen, wenn Sie kein Wissen über das Schema des Datenspeichers haben. CXMLAccessor
funktioniert wie CDynamicStringAccessorW
folgt, mit der Ausnahme, dass der frühere Daten, auf die über den Datenspeicher zugegriffen wird, als XML-formatierte (markierte) Daten konvertiert. Die XML-Tagnamen entsprechen den Spaltennamen des Datenspeichers so genau wie möglich.
Verwenden Sie CXMLAccessor
sie wie jede andere Accessorklasse, und übergeben Sie sie als Vorlagenparameter an CCommand
oder CTable
:
CTable<CXMLAccessor, CRowset> rs;
Verwenden Sie "GetXMLRowData ", um Daten aus der Tabelle jeweils eine Zeile abzurufen, und navigieren Sie mithilfe von Methoden wie MoveNext
z. B.:
// 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();
}
Sie können GetXMLColumnData verwenden, um die Spalteninformationen (Datentyp) als XML-formatierte Zeichenfolgendaten abzurufen.