存取 XML 資料
有兩種從資料來源擷取 XML 資料的不同方式:一種是使用 CStreamRowset,另一種是使用 CXMLAccessor。
功能 |
CStreamRowset |
CXMLAccessor |
---|---|---|
可傳送的資料量 |
一次擷取所有的資料行和資料列資料。 |
擷取所有的資料行資料,但是一次只能有一個資料列。您必須使用 MoveNext 這類的方法來巡覽資料列。 |
格式化字串 |
SQL Server 會格式化 XML 字串並將它傳送至消費者。 |
擷取具有原型格式 (要求提供者以 Unicode 字串傳送) 的資料列集資料,然後建置包含 XML 格式資料的字串。 |
格式化的控制 |
您可以設定某些 SQL Server 2000 的特定屬性,以控制 XML 字串的格式化方式。 |
您無法控制產生的 XML 字串之格式。 |
雖然 CStreamRowset 提供了一種整體來說是更有效率之擷取 XML 格式資料的方式,但是只有 SQL Server 2000 才支援這種方法。
使用 CStreamRowset 擷取 XML 資料
您可以在 CCommand 或 CTable 宣告中將 CStreamRowset 指定成資料列集類型。您可以將它用在您自己的存取子或不用任何存取子,例如:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-或-
CCommand<CNoAccessor, CStreamRowset> myCmd;
通常當您呼叫CCommand::Open (比方說,指定CRowset與TRowset類別),它會取得IRowset指標。ICommand::Execute傳回IRowset指標,這儲存在m_spRowset成員的CRowset物件。MoveFirst、MoveNext 和 GetData 這類方法會使用此指標擷取資料。
相反地,ICommand::Execute 會在您呼叫 CCommand::Open 時 (卻將 CStreamRowset 指定為 TRowset 類別),傳回儲存於 CStreamRowset 的 m_spStream 資料成員中的 ISequentialStream 指標。然後您可以使用 Read 方法以擷取 XML 格式的資料 (Unicode 字串)。例如:
myCmd.m_spStream->Read()
SQL Server 2000 會執行 XML 格式化,並將資料列集的所有資料行和資料列以 XML 字串傳回。
如需使用 Read 方法的範例,請參閱實作簡單消費者內的<加入 XML 支援至消費者>。
注意事項 |
---|
使用 CStreamRowset 的 XML 支援僅適用於 SQL Server 2000,而且要求您擁有 SQL Server 2000 的 OLE DB 提供者 (和 MDAC 一起安裝)。 |
使用 CXMLAccessor 擷取 XML 資料
當您不了解資料存放區的結構描述時,CXMLAccessor 能讓您將資料來源的資料存取為字串。除了能把從資料存放區存取的所有資料轉換為 XML 格式 (加上標記) 資料以外,CXMLAccessor 的其他作用就如同 CDynamicStringAccessorW。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 格式字串資料方式擷取資料行 (資料型別) 資訊。