BLOB 和 OLE 对象

SQL Server Native Client OLE DB 访问接口公开 ISequentialStream 接口,以便支持使用者访问 SQL Serverntexttextimagevarchar(max)nvarchar(max)varbinary(max) 和作为二进制大型对象 (BLOB) 的 xml 数据类型。通过对 ISequentialStream 执行 Read 方法,使用者可以用便于管理的方式成块检索大量数据。

有关说明此功能的示例,请参阅 CodePlex 上提供的用于设置大型数据的 OLE BD 示例;有关详细信息,请参阅 SQL Server 数据库引擎示例

当使用者在数据修改绑定的取值函数中提供接口指针时,SQL Server Native Client OLE DB 访问接口可以使用由使用者实现的 IStorage 接口。

对于大值数据类型,SQL Server Native Client OLE DB 访问接口检查 IRowset 和 DDL 接口中的类型大小假设。数据类型为 varcharnvarcharvarbinary 且最大大小设置为无限制的列将通过返回列数据类型的架构行集和接口表示为 ISLONG。

SQL Server Native Client OLE DB 访问接口将 varchar(max)varbinary(max)nvarchar(max) 类型分别公开为 DBTYPE_STR、DBTYPE_BYTES 和 DBTYPE_WSTR。

若要使用这些类型,应用程序可以使用以下选项:

  • 绑定为字节(DBTYPE_STR、DBTYPE_BYTES 和 DBTYPE_WSTR)。如果缓冲区不够大,将发生截断,这与早期版本中的这些类型完全相同(但是现在可以使用更大的值)。

  • 绑定为字节并指定 DBTYPE_BYREF。

  • 绑定为 DBTYPE_IUNKNOWN 并使用流处理。

如果绑定为 DBTYPE_IUNKNOWN,则使用 ISequentialStream 流功能。SQL Server Native Client OLE DB 访问接口支持针对大值数据类型将输出参数绑定为 DBTYPE_IUNKNOWN,以利于处理以下情况:存储过程返回这些数据类型作为返回值,并将其作为 DBTYPE_IUNKNOWN 向客户端公开。

存储对象限制

  • SQL Server Native Client OLE DB 访问接口只能支持一个打开的存储对象。尝试打开多个存储对象(以获取对多个 ISequentialStream 接口指针的引用)返回 DBSTATUS_E_CANTCREATE。

  • 在 SQL Server Native Client OLE DB 访问接口中,DBPROP_BLOCKINGSTORAGEOBJECTS 只读属性的默认值为 VARIANT_TRUE。这指示如果存储对象处于活动状态,某些方法(存储对象上的方法除外)将失败,并返回 E_UNEXPECTED。

  • 当创建引用由使用者实现的存储对象的行取值函数时,SQL Server Native Client OLE DB 访问接口必须了解该存储对象提供的数据长度。使用者必须在用于创建取值函数的 DBBINDING 结构中绑定一个长度指示符。

  • 如果行包含多个大型数据值,且 DBPROP_ACCESSORDER 不为 DBPROPVAL_AO_RANDOM,使用者必须使用支持 SQL Server Native Client OLE DB 访问接口游标的行集来检索行数据,或在检索其他行值之前处理所有大型数据值。如果 DBPROP_ACCESSORDER 为 DBPROPVAL_AO_RANDOM,SQL Server Native Client OLE DB 访问接口将所有 xml 数据类型缓存为二进制大型对象 (BLOB),以便以任意顺序进行访问。