SQL Server Native Client 中的 BLOB 和 OLE 对象
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)
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 访问接口游标支持的行集来检索行数据或处理所有大型数据值。 如果DBPROP_ACCESSORDER DBPROPVAL_AO_RANDOM,SQL Server Native Client OLE DB 访问接口会将所有 xml 数据类型缓存为二进制大型对象(BLOB),以便可以按任意顺序访问它。