Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует два отдельных метода извлечения 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::ExecuteIRowset возвращает указатель, который хранится в 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-форматированных строковых данных.