Partilhar via


Suporte a FILESTREAM no OLE DB Driver para SQL Server

Aplica-se a:SQL Server no Windows

Baixar driver OLE DB

A partir do SQL Server 2008 (10.0.x), o OLE DB Driver para SQL Server suporta a funcionalidade melhorada FILESTREAM. Para exemplos, veja FILESTREAM e OLE DB.

O FILESTREAM fornece uma forma de armazenar e aceder a grandes valores binários, quer através do SQL Server quer através de acesso direto ao sistema de ficheiros do Windows. Um valor binário grande é um valor superior a 2 gigabytes (GB). Para mais informações sobre suporte melhorado a FILESTREAM, consulte FILESTREAM (SQL Server).

Quando uma ligação à base de dados é aberta, @@TEXTSIZE é definida para -1 (ilimitada), por defeito.

Também é possível aceder e atualizar colunas FILESTREAM usando APIs do sistema de ficheiros do Windows.

Para mais informações, consulte Access FILESTREAM Data with OpenSqlFilestream.

Consulta para Colunas FILESTREAM

Os conjuntos de linhas de esquema no OLE DB não reportam se uma coluna é uma coluna FILESTREAM. ITableDefinition no OLE, o DB não pode ser usado para criar uma coluna FILESTREAM.

Para criar colunas FILESTREAM ou para detetar quais as colunas existentes que são colunas FILESTREAM, pode usar a is_filestream coluna da vista de catálogo sys.columns .

O seguinte script é um exemplo:

-- Create a table with a FILESTREAM column.
CREATE TABLE Bob_01 (
    GuidCol1 UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(),
    IntCol2 INT,
    varbinaryCol3 VARBINARY(MAX) FILESTREAM
);

-- Find FILESTREAM columns.
SELECT name
FROM sys.columns
WHERE is_filestream = 1;

-- Determine whether a column is a FILESTREAM column.
SELECT is_filestream
FROM sys.columns
WHERE name = 'varbinaryCol3'
    AND object_id IN (
        SELECT object_id
        FROM sys.tables
        WHERE name = 'Bob_01'
    );

Down-Level Compatibilidade

Se o seu cliente foi compilado usando o OLE DB Driver for SQL Server, e a aplicação se liga ao SQL Server 2012 (11.x) e versões posteriores, então o comportamento varbinary(max) é compatível com o comportamento introduzido pelo SQL Server Native Client no SQL Server 2005 (9.x). Ou seja, o tamanho máximo dos dados devolvidos está limitado a 2 GB. Para valores de resultado superiores a 2 GB, ocorre truncamento e é devolvido um aviso de "truncamento à direita dos dados da cadeia".

Quando a compatibilidade entre tipos de dados é definida para 80, o comportamento do cliente é consistente com o comportamento do cliente em níveis inferiores.

Para clientes que utilizam SQLOLEDB ou outros fornecedores lançados antes do SQL Server 2005 (9.x), varbinary(max) é mapeado para image.

Comments

  • Para enviar e receber valores varbinary(max) superiores a 2 GB, uma aplicação utiliza DBTYPE_IUNKNOWN ligações de parâmetros e resultados. Para os parâmetros, o fornecedor deve chamar IUnknown::QueryInterface para ISequentialStream e para resultados que retornam ISequentialStream.

  • Para OLE DB, a verificação relacionada com os valores ISequentialStream é relaxada. Quando o wType está DBTYPE_IUNKNOWN na DBBINDING estrutura, a verificação de comprimento pode ser desativada omitindo DBPART_LENGTH do dwPart, ou definindo o comprimento dos dados (no offset obLength no buffer de dados) para ~0. Neste caso, o fornecedor não verifica o comprimento do valor e solicita e devolve todos os dados disponíveis através do fluxo. Esta alteração aplica-se a todos os tipos de objetos grandes (LOB) e XML, mas apenas quando ligado a servidores SQL Server 2005 (9.x) (ou posteriores). Isto proporciona maior flexibilidade para os programadores, mantendo a consistência e a compatibilidade retroativa para aplicações existentes e servidores downlevel. Esta alteração afeta todas as interfaces que transferem dados, principalmente IRowset::GetData, ICommand::Execute, e IRowsetFastLoad::InsertRow.