访问 XML 数据

从数据源检索 XML 数据有两种不同的方法:一种方法使用 CStreamRowset,另一种使用 CXMLAccessor

功能 CStreamRowset CXMLAccessor
已传输的数据量 一次从所有列和行中检索数据。 从所有列中检索数据,但一次只检索一行。 你必须使用 MoveNext 等方法。
格式化字符串 SQL Server 格式化 XML 字符串并将其发送给使用者。 以本机格式检索行集数据(请求提供程序将其作为 Unicode 字符串发送),然后构建以 XML 格式保存数据的字符串。
控制格式 通过设置一些 SQL Server 2000 特定的属性,你可以在一定程度上控制 XML 字符串的格式。 你无法控制生成的 XML 字符串的格式。

虽然 CStreamRowset 提供了一种以 XML 格式检索数据的更全面有效的方法,但它仅受 SQL Server 2000 支持。

使用 CStreamRowset 检索 XML 数据

CCommandCTable 声明中将 CStreamRowset 指定为行集类型。 你可以将它与你自己的访问器一起使用,也可以不使用访问器,例如:

CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;

- 或者 -

CCommand<CNoAccessor, CStreamRowset> myCmd;

通常,当你调用 CCommand::Open(例如,将 CRowset 指定为 TRowset 类)时,它会获得一个 IRowset 指针。 ICommand::Execute 返回一个 IRowset 指针,该指针存储在 CRowset 对象的 m_spRowset 成员中。 MoveFirstMoveNextGetData 等方法使用该指针检索数据。

相反,当你调用 CCommand::Open(但将 CStreamRowset 指定为 TRowset 类)时,ICommand::Execute 将返回一个 ISequentialStream 指针,该指针存储在 CStreamRowsetm_spStream 数据成员中。 然后使用 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 使你可在不了解数据存储的架构的情况下以字符串数据方式访问数据源中的数据。 CXMLAccessorCDynamicStringAccessorW 的工作方式基本相同,只是前者将从数据存储访问的所有数据转换为 XML 格式(标记)数据。 XML 标记名称将尽可能与数据存储的列名匹配。

像使用任何其他访问器类一样使用,将 CXMLAccessor 作为模板参数传递给 CCommandCTable

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 格式的字符串数据。

另请参阅

使用访问器