Sdílet prostřednictvím


Podpora FILESTREAM v OLE DB Driver for SQL Server

Platí pro:SQL Server ve Windows

Stáhnout ovladač OLE DB

Od SQL Server 2008 (10.0.x) podporuje OLE DB Driver for SQL Server rozšířenou funkci FILESTREAM. Pro ukázky viz FILESTREAM a OLE DB.

FILESTREAM poskytuje způsob, jak ukládat a přistupovat k velkým binárním hodnotám, buď prostřednictvím SQL Serveru, nebo přímým přístupem k souborovému systému Windows. Velká binární hodnota je hodnota větší než 2 gigabajty (GB). Pro více informací o rozšířené podpoře FILESTREAM viz FILESTREAM (SQL Server).

Když je připojení k databázi otevřeno, @@TEXTSIZE je výchozí nastavení (-1neomezené).

Je také možné přistupovat ke sloupcům FILESTREAM a aktualizovat je pomocí API souborového systému Windows.

Pro více informací viz Access FILESTREAM Data with OpenSqlFilestream.

Dotaz na sloupce FILESTREAM

Sady řádků schématu v OLE DB neuvádějí, zda je sloupec FILESTREAM. ITableDefinition v OLE DB nelze použít k vytvoření sloupce FILESTREAM.

Pro vytvoření sloupců FILESTREAM nebo pro detekci, které stávající sloupce jsou sloupci FILESTREAM, můžete použít sloupec is_filestream v zobrazení katalogu sys.columns .

Následující skript je příkladem:

-- 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 Kompatibilita

Pokud byl váš klient zkompilován pomocí OLE DB Driver for SQL Server a aplikace se připojuje k SQL Server 2012 (11.x) a novějším verzím, pak je varbinary(max) chování kompatibilní s chováním zavedeným SQL Server Native Client v SQL Server 2005 (9.x). To znamená, že maximální velikost vrácených dat je omezena na 2 GB. Pro hodnoty výsledků větší než 2 GB dochází k okrácení a zobrazí se varování "ořezávání dat řetězce vpravo".

Když je kompatibilita datových typů nastavena na 80, chování klienta je konzistentní s chováním klienta na nižší úrovni.

Pro klienty, kteří používají SQLOLEDB nebo jiné poskytovatele vydané před SQL Server 2005 (9.x), je varbinary(max) mapován na image.

Comments

  • Pro odesílání a přijímání varbinárních (max) hodnot větších než 2 GB aplikace používá DBTYPE_IUNKNOWN vazby parametrů a výsledků in. Pro parametry musí poskytovatel volat IUnknown::QueryInterface pro ISequentialStream a pro výsledky, které vrací ISequentialStream.

  • Pro OLE DB je kontrola související s hodnotami ISequentialStream uvolněná. Když je DBTYPE_IUNKNOWNwType ve struktuřeDBBINDING, lze kontrolu délky deaktivovat buď vynecháním DBPART_LENGTH z dwPart, nebo nastavením délky dat (při offsetu obLength v datovém bufferu) na .~0 V tomto případě poskytovatel nekontroluje délku hodnoty a požaduje a vrací všechna data dostupná v rámci streamu. Tato změna se aplikuje na všechny typy velkých objektů (LOB) a XML, ale pouze při připojení k SQL Server 2005 (9.x) (nebo novějším) serverům. To poskytuje vývojářům větší flexibilitu a zároveň zachovává konzistenci a zpětnou kompatibilitu pro stávající aplikace a servery na nižší úrovni. Tato změna ovlivňuje všechna rozhraní, která přenášejí data, především IRowset::GetData, ICommand::Execute, a .IRowsetFastLoad::InsertRow