BLOBs e objetos OLE no SQL Server Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

O provedor OLE DB SQL Server Native Client expõe a interface ISequentialStream para dar suporte ao acesso do consumidor a SQL Server tipos de dados ntext, text, image, varchar(max), nvarchar(max), varbinary(max)e xml como BLOBs (objetos binários grandes). O método Read em ISequentialStream permite que o consumidor recupere muitos dados em partes gerenciáveis.

Para obter um exemplo que demonstra esse recurso, confira Definir dados grandes (OLE DB).

O provedor OLE DB SQL Server Native Client pode usar uma interface IStorage implementada pelo consumidor quando o consumidor fornece o ponteiro de interface em um acessador associado à modificação de dados.

Para tipos de dados de valor grande, o provedor OLE DB SQL Server Native Client verifica se há suposições de tamanho de tipo em interfaces IRowset e DDL. As colunas com tipos de dados varchar, nvarchar e varbinary com tamanho máximo definido como ilimitado serão representadas como ISLONG por meio dos conjuntos de linhas de esquema e interfaces que retornam tipos de dados de coluna.

O provedor OLE DB SQL Server Native Client expõe os tipos varchar(max), varbinary(max) e nvarchar(max) como DBTYPE_STR, DBTYPE_BYTES e DBTYPE_WSTR respectivamente.

Para trabalhar com esses tipos, um aplicativo tem as seguintes opções:

  • Associar como o tipo (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Se o buffer não for suficientemente grande, ocorrerá truncamento, exatamente como para esses tipos em versões anteriores (embora agora haja valores maiores disponíveis).

  • Associar como o tipo e também especificar DBTYPE_BYREF.

  • Associar como DBTYPE_IUNKNOWN e usar streaming.

Se associado a DBTYPE_IUNKNOWN, é usada a funcionalidade de fluxo ISequentialStream. O provedor OLE DB SQL Server Native Client dá suporte a parâmetros de saída de associação como DBTYPE_IUNKNOWN para tipos de dados de valor grande para facilitar cenários em que um procedimento armazenado retorna esses tipos de dados como valores retornados que serão expostos como DBTYPE_IUNKNOWN ao cliente.

Limitações de objetos de armazenamento

  • O provedor OLE DB SQL Server Native Client pode dar suporte apenas a um único objeto de armazenamento aberto. As tentativas de abrir mais de um objeto de armazenamento (para obter uma referência em mais de um ponteiro da interface ISequentialStream) retornam DBSTATUS_E_CANTCREATE.

  • No provedor OLE DB SQL Server Native Client, o valor padrão da propriedade somente leitura DBPROP_BLOCKINGSTORAGEOBJECTS é VARIANT_TRUE. Isso indica que se um objeto de armazenamento está ativo, alguns métodos (diferentes daqueles nos objetos de armazenamento) falharão com E_UNEXPECTED.

  • O comprimento dos dados apresentados por um objeto de armazenamento implementado pelo consumidor deve ser conhecido pelo provedor OLE DB SQL Server Native Client quando o acessador de linha que faz referência ao objeto de armazenamento é criado. O consumidor deve associar um indicador de comprimento na estrutura DBBINDING usada para a criação do acessador.

  • Se uma linha contiver mais de um único valor de dados grande e DBPROP_ACCESSORDER não for DBPROPVAL_AO_RANDOM, o consumidor deverá usar um conjunto de linhas com suporte de cursor do provedor OLE DB SQL Server Native Client para recuperar dados de linha ou processar todos os valores de dados grandes antes de recuperar outros valores de linha. Se DBPROP_ACCESSORDER for DBPROPVAL_AO_RANDOM, o provedor OLE DB do SQL Server Native Client armazenará em cache todos os tipos de dados xml como BLOBs (objetos binários grandes) para que possam ser acessados em qualquer ordem.

Nesta seção

Consulte Também

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