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


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

Обновлен: Ноябрь 2007

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

s55kt8s3.alert_note(ru-ru,VS.90).gifПримечание.

При работе с классами 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.

s55kt8s3.alert_caution(ru-ru,VS.90).gifВнимание!

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

См. также

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

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

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

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