Compartilhar via


BLOBs e objetos OLE

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 SQL Serverntext, 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 este recurso, veja o exemplo do BD OLE para definir dados grandes, disponível no CodePlex; consulte Exemplos do Mecanismo de Banco de Dados do SQL Server para obter mais informações.

O provedor OLE DB do SQL Server Native Client pode usar uma interface IStorage implementada pelo consumidor quando o consumidor fornece o ponteiro de 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 as suposições de tamanho de tipo em interfaces IRowset e DDL. As colunas com tipos de dados varchar, nvarchar e varbinary e o tamanho máximo definido como ilimitado serão representadas como ISLONG pelos conjuntos de linhas do 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) respectivamente como DBTYPE_STR, DBTYPE_BYTES e DBTYPE_WSTR.

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 à associação de parâmetros de saída 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 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 do ISequentialStream) retornam DBSTATUS_E_CANTCREATE.

  • No provedor OLE DB do 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 do SQL Server Native Client quando o acessador de linha que referencia o 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 do 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, de forma possam ser acessados em qualquer ordem.