Partilhar via


BLOBs e objetos OLE no SQL Server Native Client

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

O provedor OLE DB do SQL Server Native Client expõe a interface ISequentialStream para dar suporte ao acesso do consumidor aos tipos de dados ntext, text, image, varchar(max), nvarchar(max), varbinary(max) e xml do SQL Server 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 do SQL Server Native Client pode usar uma interface IStorage implementada pelo consumidor quando o consumidor fornece o ponteiro da interface em um acessador associado para modificação de dados.

Para tipos de dados de valor grande, o provedor OLE DB do SQL Server Native Client verifica se há suposições de tamanho de tipo nas interfaces IRowset e DDL. As colunas com os 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 do 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 do 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 de retorno que serão expostos como DBTYPE_IUNKNOWN para o cliente.

Limitações de objetos de armazenamento

  • O provedor OLE DB do SQL Server Native Client pode dar suporte a apenas 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 do SQL Server Native Client, o valor padrão da propriedade DBPROP_BLOCKINGSTORAGEOBJECTS somente leitura é 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 divulgado ao provedor OLE DB do 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 estiver DBPROPVAL_AO_RANDOM, o consumidor deverá usar um conjunto de linhas com suporte para cursor do provedor OLE DB do 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

Confira também

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