访问 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
指针,该指针存储在 CRowset
对象的 m_spRowset
成员中。 MoveFirst
、MoveNext
和 GetData
等方法使用该指针检索数据。
相反,当你调用 CCommand::Open
(但将 CStreamRowset
指定为 TRowset
类)时,ICommand::Execute
将返回一个 ISequentialStream
指针,该指针存储在 CStreamRowset 的 m_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 使你可在不了解数据存储的架构的情况下以字符串数据方式访问数据源中的数据。 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 格式的字符串数据。