Uzyskiwanie dostępu do danych XML
Istnieją dwie oddzielne metody pobierania danych XML ze źródła danych: jeden używa zestawu CStreamRowset , a drugi używa CXMLAccessor.
Funkcje | CStreamRowset | CXMLAccessor |
---|---|---|
Ilość przesyłanych danych | Pobiera dane ze wszystkich kolumn i wierszy jednocześnie. | Pobiera dane ze wszystkich kolumn, ale tylko jeden wiersz jednocześnie. Musisz nawigować po wierszach przy użyciu metod, takich jak MoveNext . |
Formatowanie ciągu | Program SQL Server formatuje ciąg XML i wysyła go do odbiorcy. | Pobiera dane zestawu wierszy w formacie natywnym (żądania wysyłane przez dostawcę jako ciągi Unicode), a następnie tworzy ciąg zawierający dane w formacie XML. |
Kontrola nad formatowaniem | Masz pewną kontrolę nad sposobem formatowania ciągu XML przez ustawienie niektórych właściwości specyficznych dla programu SQL Server 2000. | Nie masz kontroli nad formatem wygenerowanego ciągu XML. |
Chociaż CStreamRowset
zapewnia bardziej wydajny sposób pobierania danych w formacie XML, jest obsługiwany tylko przez program SQL Server 2000.
Pobieranie danych XML przy użyciu zestawu CStreamRowset
Jako typ zestawu wierszy w deklaracji CCommand
lub CTable
należy określić wartość CStreamRowset. Można go używać z własnym akcesorem lub bez dostępu, na przykład:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
— lub —
CCommand<CNoAccessor, CStreamRowset> myCmd;
Zwykle podczas wywoływania CCommand::Open
(na przykład CRowset
określania TRowset
jako klasy) otrzymuje wskaźnik IRowset
. ICommand::Execute
IRowset
Zwraca wskaźnik, który jest przechowywany w elemencie m_spRowset
CRowset
członkowskim obiektu. Metody takie jak MoveFirst
, MoveNext
i GetData
używają tego wskaźnika do pobierania danych.
Natomiast podczas wywoływania CCommand::Open
metody (ale określ CStreamRowset
jako TRowset
klasęISequentialStream
) ICommand::Execute
zwraca wskaźnik, który jest przechowywany w m_spStream
składowej danych CStreamRowset. Następnie użyj Read
metody , aby pobrać dane (ciąg Unicode) w formacie XML. Na przykład:
myCmd.m_spStream->Read()
Program SQL Server 2000 wykonuje formatowanie XML i zwraca wszystkie kolumny i wszystkie wiersze zestawu wierszy jako jeden ciąg XML.
Aby zapoznać się z przykładem przy użyciu Read
metody, zobacz Dodawanie obsługi XML do odbiorcy w temacie Implementowanie prostego konsumenta.
Uwaga
Obsługa kodu XML przy użyciu CStreamRowset
programu działa tylko z programem SQL Server 2000 i wymaga dostawcy OLE DB dla programu SQL Server 2000 (zainstalowanego z usługą MDAC).
Pobieranie danych XML przy użyciu CXMLAccessor
Funkcja CXMLAccessor umożliwia dostęp do danych ze źródła danych jako danych ciągu, gdy nie masz wiedzy na temat schematu magazynu danych. CXMLAccessor
działa tak, jak CDynamicStringAccessorW
to, że poprzednia konwertuje wszystkie dane dostępne z magazynu danych jako dane sformatowane w formacie XML (oznakowane). Nazwy tagów XML są jak najbardziej zgodne z nazwami kolumn magazynu danych.
Użyj CXMLAccessor
metody , tak jak w przypadku każdej innej klasy dostępu, przekazując ją jako parametr szablonu do CCommand
lub CTable
:
CTable<CXMLAccessor, CRowset> rs;
Użyj metody GetXMLRowData , aby pobrać dane z tabeli jeden wiersz jednocześnie i nawigować po wierszach przy użyciu metod, takich jak MoveNext
, na przykład:
// 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();
}
Możesz użyć metody GetXMLColumnData , aby pobrać informacje o kolumnie (typie danych) jako dane ciągów w formacie XML.