Compartir a través de


BLOB y objetos OLE

El proveedor OLE DB de SQL Server Native Client expone la interfaz ISequentialStream para admitir el acceso del consumidor a tipos de datos ntext, text, image, varchar(max), nvarchar(max), varbinary(max) y xml de SQL Server como objetos binarios grandes (BLOB). El método Read de ISequentialStream permite al consumidor recuperar muchos datos en fragmentos fáciles de administrar.

Para obtener un ejemplo que muestra esta característica, vea el ejemplo de OLE DB para setting large data disponible en CodePlex; vea Ejemplos de motor de base de datos de SQL Server para obtener más información.

El proveedor OLE DB de SQL Server Native Client puede utilizar una interfaz IStorage implementada por el consumidor cuando este proporciona el puntero de interfaz en un descriptor de acceso enlazado para la modificación de datos.

Para los tipos de datos de valor grande, el proveedor OLE DB de SQL Server Native Client comprueba las suposiciones de tamaño de los tipos en las interfaces IRowset y DDL. Las columnas con tipos de datos varchar, nvarchar y varbinary cuyo tamaño máximo está establecido en ilimitado se representarán como ISLONG en los conjuntos de filas de esquema y las interfaces que devuelven tipos de datos de columna.

El proveedor OLE DB de SQL Server Native Client expone los tipos varchar(max), varbinary(max) y nvarchar(max) como DBTYPE_STR, DBTYPE_BYTES y DBTYPE_WSTR, respectivamente.

Para trabajar con estos tipos, una aplicación dispone de las opciones siguientes:

  • Enlazar como el tipo (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Si el búfer no es suficientemente grande, se producirá un truncamiento, exactamente igual que ocurría con estos tipos en las versiones anteriores (aunque ahora hay valores mayores).

  • Enlazar como el tipo y también especificar DBTYPE_BYREF.

  • Enlazar como DBTYPE_IUNKNOWN y usar la transmisión por secuencias.

Si se enlaza a DBTYPE_IUNKNOWN, se utiliza la funcionalidad de transmisión por secuencias de ISequentialStream. El proveedor OLE DB de SQL Server Native Client también admite el enlace de parámetros de salida como DBTYPE_IUNKNOWN en tipos de datos de valor grande para facilitar situaciones en las que un procedimiento almacenado devuelve estos tipos de datos como valores devueltos que serán expuestos como DBTYPE_IUNKNOWN al cliente.

Limitaciones de los objetos de almacenamiento

  • El proveedor OLE DB de SQL Server Native Client solo puede admitir un único objeto de almacenamiento abierto. Cuando se intenta abrir más de un objeto de almacenamiento (para obtener una referencia en más de un puntero de interfaz ISequentialStream), se recibe DBSTATUS_E_CANTCREATE.

  • En el proveedor OLE DB de SQL Server Native Client, el valor predeterminado de la propiedad DBPROP_BLOCKINGSTORAGEOBJECTS de solo lectura es VARIANT_TRUE. Esto indica que si un objeto de almacenamiento está activo, algunos métodos (salvo en los que están en los objetos de almacenamiento) sufrirán un error con E_UNEXPECTED.

  • Se debe dar a conocer al proveedor OLE DB de SQL Server Native Client la longitud de los datos presentados por un objeto de almacenamiento implementado por el consumidor cuando se crea el descriptor de acceso a filas que hace referencia al objeto de almacenamiento. El consumidor debe enlazar un indicador de longitud de la estructura DBBINDING que se utiliza para la creación del descriptor de acceso.

  • Si una fila contiene más de un valor de datos grande y DBPROP_ACCESSORDER no es DBPROPVAL_AO_RANDOM, el consumidor debe utilizar un conjunto de filas compatible con cursores del proveedor OLE DB de SQL Server Native Client para recuperar datos de filas o procesar todos los valores de datos grandes antes de recuperar otros valores de fila. Si DBPROP_ACCESSORDER es DBPROPVAL_AO_RANDOM, el proveedor OLE DB de SQL Server Native Client almacena en memoria caché todos los tipos de datos xml como objetos binarios grandes (BLOB) para que se pueda tener acceso a ellos en cualquier orden.

Historial de cambios

Contenido actualizado

Se ha actualizado el vínculo al ejemplo.