BLOBs e Objetos OLE no Cliente Nativo do SQL Server

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse Analytics

O fornecedor SQL Server Native Client OLE DB expõe a interface ISequentialStream para suportar o acesso do consumidor ao SQL Server ntext, texto, imagem, varchar(max),nvarchar(max), varbinary(max) e tipos de dados xml como objetos binários grandes (BLOBs). O método Read no ISequentialStream permite ao consumidor recuperar muitos dados em blocos geríveis.

Para um exemplo que demonstra esta funcionalidade, veja Set Large Data (OLE DB).

O fornecedor OLE DB do SQL Server Native Client pode usar uma interface IStorage implementada pelo consumidor quando o consumidor fornece o ponteiro de interface num acesso limitado para modificação de dados.

Para tipos de dados de grande valor, o fornecedor SQL Server Native Client OLE DB verifica as suposições de tamanho do tipo nas interfaces IRowset e DDL. Colunas com tipos de dados varchar, nvarchar e varbinary com tamanho máximo definido como ilimitado serão representadas como ISLONG através dos conjuntos de linhas do esquema e interfaces que retornam tipos de dados de coluna.

O fornecedor 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, respetivamente.

Para trabalhar com estes tipos, uma aplicação tem as seguintes opções:

  • Binding como tipo (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Se o buffer não for suficientemente grande, ocorrerá truncamento, exatamente como para estes tipos em versões anteriores (embora agora existam valores maiores).

  • Associe como tipo e também especifique DBTYPE_BYREF.

  • Vincula como DBTYPE_IUNKNOWN e usa streaming.

Se vinculado a DBTYPE_IUNKNOWN, é utilizada a funcionalidade de fluxo ISequentialStream. O fornecedor OLE DB SQL Server Native Client suporta parâmetros de saída de ligação como DBTYPE_IUNKNOWN para tipos de dados de grande valor, facilitando cenários em que um procedimento armazenado devolve esses tipos de dados como valores de retorno que serão expostos como DBTYPE_IUNKNOWN ao cliente.

Limitações dos Objetos de Armazenamento

  • O fornecedor OLE DB do SQL Server Native Client só pode suportar um único objeto de armazenamento aberto. As tentativas de abrir mais do que um objeto de armazenamento (para obter uma referência em mais do que um ponteiro de interface ISequentialStream ) retornam DBSTATUS_E_CANTCREATE.

  • No fornecedor OLE DB SQL Server Native Client, o valor predefinido da propriedade DBPROP_BLOCKINGSTORAGEOBJECTS apenas leitura é VARIANT_TRUE. Isto indica que, se um objeto de armazenamento estiver ativo, alguns métodos (para além dos objetos de armazenamento) falharão com E_UNEXPECTED.

  • O comprimento dos dados apresentados por um objeto de armazenamento implementado pelo consumidor deve ser comunicado ao fornecedor do SQL Server Native Client OLE DB quando o acessório de linha que faz referência ao objeto de armazenamento for criado. O consumidor deve ligar um indicador de comprimento na estrutura DBBINDING usada para a criação do acessório.

  • Se uma linha contiver mais do que um único valor grande de dados e DBPROP_ACCESSORDER não for DBPROPVAL_AO_RANDOM, o consumidor deve usar um conjunto de linhas suportado por um fornecedor de SQL Server Native Client OLE DB 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 fornecedor de OLE DB SQL Server Native Client armazena em cache todos os tipos de dados xml como objetos binários grandes (BLOBs), de modo a que possam ser acedidos em qualquer ordem.

Na presente seção