Доступ к данным XML
Существует два отдельных метода извлечения XML-данных из источника данных: один использует CStreamRowset и другой использует CXMLAccessor.
Функция | CStreamRowset | CXMLAccessor |
---|---|---|
Объем передаваемых данных | Извлекает данные из всех столбцов и строк одновременно. | Извлекает данные из всех столбцов, но только одна строка за раз. Необходимо перемещать строки с помощью таких методов, как MoveNext . |
Форматирование строки | SQL Server форматирует XML-строку и отправляет его потребителю. | Извлекает данные набора строк в собственном формате (запросы, которые поставщик отправляет в виде строк Юникода), а затем создает строку, содержащую данные в формате XML. |
Управление форматированием | У вас есть некоторый уровень управления форматированием XML-строки, задав некоторые свойства SQL Server 2000. | У вас нет контроля над форматом созданной xml-строки. |
Хотя CStreamRowset
предоставляет более эффективный способ получения данных в формате XML, он поддерживается только SQL Server 2000.
Получение XML-данных с помощью CStreamRowset
Вы указываете CStreamRowset в качестве типа набора строк в вашем CCommand
или CTable
объявлении. Вы можете использовать его с собственным методом доступа или без доступа, например:
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
(но указан TRowset
CStreamRowset
как ISequentialStream
класс), ICommand::Execute
возвращается указатель, который хранится в m_spStream
элементе данных CStreamRowset. Затем вы используете Read
метод для получения данных (строка Юникода) в формате XML. Например:
myCmd.m_spStream->Read()
SQL Server 2000 выполняет форматирование XML и возвращает все столбцы и все строки набора строк в виде одной XML-строки.
Пример использования Read
метода см. в разделе "Добавление поддержки XML для потребителя " в реализации простого потребителя.
Примечание.
Поддержка XML, используемая только CStreamRowset
с SQL Server 2000, требует наличия поставщика OLE DB для SQL Server 2000 (устанавливается с MDAC).
Получение XML-данных с помощью CXMLAccessor
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-форматированных строковых данных.