Blobs y objetos OLE en SQL Server Native Client

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

El proveedor OLE DB de SQL Server Native Client expone la interfaz ISequentialStream para admitir el acceso de los consumidores a SQL Server ntext, text, image, varchar(max), nvarchar(max), varbinary(max)y tipos de datos xml 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, consulte Establecimiento de datos grandes (OLE DB).

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

En el caso de los tipos de datos de gran valor, el proveedor OLE DB SQL Server Native Client comprueba si hay suposiciones de tamaño de tipo en interfaces IRowset y DDL. Las columnas con tipos de datos varchar, nvarchar y varbinary con un tamaño máximo establecido en ilimitado se representarán como ISLONG a través de 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 tiene las siguientes opciones:

  • 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 flujo de ISequentialStream. El proveedor OLE DB de SQL Server Native Client admite parámetros de salida de enlace como DBTYPE_IUNKNOWN para tipos de datos de gran valor para facilitar escenarios en los que un procedimiento almacenado devuelve estos tipos de datos como valores devueltos que se expondrán 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 de solo lectura DBPROP_BLOCKINGSTORAGEOBJECTS 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.

  • La longitud de los datos presentados por un objeto de almacenamiento implementado por el consumidor debe conocerse al proveedor OLE DB SQL Server Native Client cuando se crea el descriptor de acceso de fila 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 único valor de datos grande y DBPROP_ACCESSORDER no es DBPROPVAL_AO_RANDOM, el consumidor debe usar un conjunto de filas compatible con el cursor del proveedor OLE DB SQL Server Native Client para recuperar datos de fila 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 SQL Server Native Client almacena en caché todos los tipos de datos xml como objetos binarios grandes (BLOB) para que se pueda acceder a ellos en cualquier orden.

En esta sección

Consulte también

SQL Server Native Client (OLE DB)
Usar tipos de valor grande