记录集:处理大数据项 (ODBC)
本主题适用于 MFC ODBC 类和 MFC DAO 类。
注意
如果你使用的是 MFC DAO 类,请使用 CByteArray 类(而不是 CLongBinary 类)来管理大型数据项。 如果使用 MFC ODBC 类进行批量取行,请使用 CLongBinary
而不是 CByteArray
。 有关批量行提取的详细信息,请参阅记录集:批量提取记录 (ODBC)。
假设你的数据库可以存储大量数据,例如位图(员工照片、地图、产品图片、OLE 对象等)。 这种数据通常被称为二进制大对象(或 BLOB),因为:
每个字段值都很大。
与数字和其他简单数据类型不同,BLOB 的大小无法预测。
从程序的角度来看,数据是无形的。
本主题介绍了数据库类提供了哪些支持以使用此类对象。
管理大对象
记录集有两种方法来解决管理二进制大型对象的特殊难点。 可以使用 CByteArray 类,也可以使用 CLongBinary 类。 一般情况下,CByteArray
是管理大型二进制数据的首选方法。
如 CByteArray 类中所述,CByteArray
需要的开销要高于 CLongBinary
,但功能也更强大。 CLongBinary
在 CLongBinary 类中进行了简要介绍。
有关使用 CByteArray
处理大型数据项的详细信息,请参阅 技术说明 45。
CByteArray 类
CByteArray
是 MFC 集合类之一。 一个 CByteArray
对象存储一个动态的字节数组,如果需要,这个数组可以增大。 该类通过索引提供快速访问,与内置 C++ 数组一样。 CByteArray
对象可以被序列化和转储以用于诊断目的。 该类提供用于获取和设置指定字节、插入和附加字节以及删除一个字节或所有字节的成员函数。 这些功能简化了二进制数据的分析。 例如,如果二进制对象是 OLE 对象,则可能需要处理一些标头字节才能到达实际对象。
在记录集中使用 CByteArray
通过为记录集的字段数据成员提供 CByteArray
类型,你将提供一个固定基础,RFX 可以通过这个固定基础来管理此类对象在记录集与数据源之间的传输,并且你可以通过这个固定基建处来操作对象内部的数据。 RFX 需要一个特定站点来容纳检索的数据,并且你需要通过某种方法来访问基础数据。
有关使用 CByteArray
处理大型数据项的详细信息,请参阅 技术说明 45。
CLongBinary 类
CLongBinary 对象是一个简单的 shell,围绕着在堆上分配的存储块的 HGLOBAL
句柄。 此对象绑定一个包含二进制大型对象的表列时,RFX 在需要将数据传输到记录集时分配 HGLOBAL
句柄,然后将句柄存储在记录集的 CLongBinary
字段中。
反过来,你使用 HGLOBAL
句柄 m_hData
来处理数据本身,像处理任何句柄数据一样对其进行操作。 CByteArray 正是借此提高了能力。
注意
CLongBinary 对象不能用作函数调用中的参数。 此外,它们的实现方式(调用 ::SQLGetData
)必然会降低可滚动快照的滚动性能。 当你自己使用 ::SQLGetData
调用来检索动态模式列时,也可能会出现这种情况。