存取 XML 資料
從數據源擷取 XML 數據的方法有兩種:一個使用 CStreamRowset ,另一個使用 CXMLAccessor。
功能 | CStreamRowset | CXMLAccessor |
---|---|---|
傳輸的數據量 | 一次從所有數據行和數據列擷取數據。 | 從所有數據行擷取數據,但一次只能擷取一個數據列。 您必須使用 之類的 MoveNext 方法來巡覽數據列。 |
格式化字串 | SQL Server 會格式化 XML 字串,並將其傳送給取用者。 | 以原生格式擷取數據列集數據(要求提供者以 Unicode 字串形式傳送數據),然後以 XML 格式建置保存數據的字串。 |
控制格式設定 | 您可以透過設定一些 SQL Server 2000 特定屬性,來控制 XML 字串的格式。 | 您無法控制產生的 XML 字串格式。 |
雖然 CStreamRowset
以 XML 格式擷取數據提供了更有整體效率的方式,但只有 SQL Server 2000 才支援。
使用 CStreamRowset 擷取 XML 數據
您可以將 CStreamRowset 指定為 或 CTable
宣告中的數據CCommand
列集類型。 您可以將它與您自己的存取子或無存取子搭配使用,例如:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-或-
CCommand<CNoAccessor, CStreamRowset> myCmd;
通常當您呼叫 CCommand::Open
時(例如, CRowset
指定 為 TRowset
類別),它會取得 IRowset
指標。 ICommand::Execute
會傳 IRowset
回指標,其儲存在 m_spRowset
對象的成員中 CRowset
。 、、 等MoveFirst
MoveNext
GetData
方法會使用該指標來擷取數據。
相較之下,當您呼叫 CCommand::Open
時(但指定CStreamRowset
為 TRowset
類別),ICommand::Execute
會ISequentialStream
傳回指標,該指標會儲存在 m_spStream
CStreamRowset 的數據成員中。 然後,您可以使用 Read
方法來擷取 XML 格式的 (Unicode 字串) 資料。 例如:
myCmd.m_spStream->Read()
SQL Server 2000 會執行 XML 格式設定,並以一個 XML 字串傳回數據列集的所有資料行和所有數據列。
如需使用 方法的Read
範例,請參閱在實作簡單取用者中將 XML 支援新增至取用者。
注意
使用 CStreamRowset
的 XML 支援僅適用於 SQL Server 2000,而且需要您有 OLE DB Provider for SQL Server 2000 (隨 MDAC 一起安裝)。
使用 CXMLAccessor 擷取 XML 數據
當您不知道數據存放區的架構時,CXMLAccessor 可讓您從數據來源取資料做為字串數據。 CXMLAccessor
運作方式類似 CDynamicStringAccessorW
,不同之處在於,前者會將從數據存放區存取的所有數據轉換成 XML 格式(標記)數據。 XML 標記名稱會盡可能符合資料存放區的數據行名稱。
如同 CXMLAccessor
任何其他存取子類別一樣,將它當做樣板參數 CCommand
傳遞給 或 CTable
:
CTable<CXMLAccessor, CRowset> rs;
使用 GetXMLRowData 一次從數據表一個數據列擷取數據,並使用 之類的 MoveNext
方法巡覽數據列,例如:
// 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 ,將數據行 (資料類型) 資訊擷取為 XML 格式的字串數據。