Поделиться через


Доступ к данным 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::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-форматированных строковых данных.

См. также

Использование методов доступа