BLOB 和 OLE 对象
SQL Server Native Client OLE DB 提供程序公开 ISequentialStream 接口,以支持使用者以二进制大型对象 (BLOB) 作为二进制大型对象访问SQL Server ntext、text、image、varchar (max) 、nvarchar (max) 、varbinary (max) 和 xml 数据类型。 通过对 ISequentialStream 执行 Read 方法,使用者可以用便于管理的方式成块检索大量数据 。
有关演示此功能的示例,请参阅设置大型数据 (OLE DB)。
当使用者在绑定数据修改的访问器中提供接口指针时,SQL Server Native Client OLE DB 访问接口可以使用使用者实现的 IStorage 接口。
对于大值数据类型,SQL Server Native Client OLE DB 访问接口检查 IRowset 和 DDL 接口中的类型大小假设。 具有 varchar、 nvarchar 和 varbinary 数据类型且最大大小设置为无限制的列将通过返回列数据类型的架构行集和接口表示为 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 访问接口游标支持的行集来检索行数据或在检索其他行值之前处理所有大型数据值。 如果DBPROPVAL_AO_RANDOM DBPROP_ACCESSORDER,SQL Server Native Client OLE DB 访问接口会将所有 xml 数据类型作为二进制大型对象缓存 (BLOB) ,以便可以按任意顺序对其进行访问。