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


Набор записей. Работа с большими элементами данных (ODBC)

Сведения, представленные в этом разделе, относятся как к классам MFC ODBC, так и к классам MFC DAO.

ПримечаниеПримечание

При работе с классами MFC DAO для управления большими элементами данных рекомендуется использовать класс CByteArray, а не класс CLongBinary.При работе с классами MFC ODBC с групповой выборкой строк рекомендуется использовать класс CLongBinary, а не CByteArray.Дополнительные сведения о групповой выборке строк см. в разделе Набор записей. Групповая выборка строк (ODBC).

В базе данных могут храниться элементы данных большого объема, например растровые изображения (фотографии сотрудников, карты, изображения продуктов, объекты OLE и т. д.).Объекты такого типа часто называются большими двоичными объектами (BLOB) по следующим причинам:

  • Каждое поле содержит большое значение.

  • В отличие от числовых и других простых типов данных, определить размер объекта заранее невозможно.

  • С точки зрения программы данные таких объектов не имеют строгой формы.

В этом разделе описывается реализация поддержки таких объектов с использованием классов баз данных.

Управление большими объектами

В наборах записей предусмотрено два способа устранения проблем, возникающих при работе с большими двоичными объектами.Для этих целей можно использовать класс CByteArray или класс CLongBinary.В большинстве случаев для управления большими двоичными объектами рекомендуется использовать класс CByteArray.

При использовании класса CByteArray расходуется больший объем ресурсов, однако при этом обеспечивается более высокая функциональность по сравнению с классом CLongBinary. См. описание в разделе Класс CByteArray.Краткое описание класса CLongBinary см. в разделе Класс CLongBinary.

Дополнительные сведения об использовании класса CByteArray для работы с большими элементами данных см. в разделе Техническое примечание 45.

Класс CByteArray

Класс CByteArray входит в состав коллекции классов MFC.В объекте класса CByteArray хранится динамический массив байтов, который при необходимости может расширяться.Как и во встроенных массивах C++, в этом классе поддерживается быстрый доступ к элементам по индексу.В целях диагностики для объектов класса CByteArray поддерживается сериализация и формирование дампа.В этом классе поддерживаются функции получения и установки значений определенных байтов, вставки и добавления байтов, а также удаления одного или всех байтов.Благодаря этим функциям упрощается анализ двоичных данных.Например, если двоичный объект является объектом OLE, перед обращением к самому объекту необходимо выполнить обработку нескольких байтов заголовка.

Использование класса CByteArray для работы с наборами записей

Члену данных поля в наборе записей можно присвоить тип CByteArray. Это позволит использовать функции RFX для управления передачей таких объектов между набором записей и источником данных, а также управлять данными объектами.При работе с функциями RFX необходимо использовать специальный узел для хранения извлеченных данных, а также механизм доступа к данным источника.

Дополнительные сведения об использовании класса CByteArray для работы с большими элементами данных см. в разделе Техническое примечание 45.

Класс CLongBinary

Объект класса CLongBinary представляет собой простую оболочку для дескриптора HGLOBAL, определенного для выделенного в куче блока памяти.В случае привязки к столбцу таблицы, содержащему большой двоичный объект, с помощью функции RFX выделяется дескриптор HGLOBAL (используется при передаче данных из набора записей), который сохраняется в поле класса CLongBinary набора записей.

В свою очередь, дескриптор HGLOBAL m_hData используется для работы с самими данными так же, как и с любыми другими данными дескриптора.В этом случае используются дополнительные возможности класса CByteArray.

Предупреждающее замечаниеВнимание

Объекты класса CLongBinary не могут использоваться в качестве параметров при вызове функций.Кроме того, если в реализацию такого объекта включен вызов функции ::SQLGetData, во всех случаях снижается производительность при прокрутке моментальных снимков.Производительность также снижается при вызове функции ::SQLGetData для извлечения столбцов динамической схемы.

См. также

Основные понятия

Набор записей (ODBC)

Набор записей. Определение сумм и других статистических результатов (ODBC)

Обмен данными полями записей (RFX)