Udostępnij przez


Wsparcie dla FILESTREAM w OLE DB Driver for SQL Server

Dotyczy:Program SQL Server w systemie Windows

pobierz sterownik OLE DB

Począwszy od SQL Server 2008 (10.0.x), sterownik OLE DB dla SQL Server wspiera ulepszoną funkcję FILESTREAM. Przykłady można znaleźć w FILESTREAM i OLE DB.

FILESTREAM umożliwia przechowywanie i dostęp do dużych wartości binarnych, zarówno przez SQL Server, jak i bezpośredni dostęp do systemu plików Windows. Duża wartość binarna to wartość większa niż 2 gigabajty (GB). Więcej informacji na temat rozszerzonego wsparcia dla FILESTREAM można znaleźć w artykule FILESTREAM (SQL Server).

Gdy połączenie z bazą danych zostanie otwarte, @@TEXTSIZE domyślnie ustawia się (-1nielimitowane).

Możliwe jest także uzyskanie dostępu i aktualizacji kolumn FILESTREAM za pomocą API systemu plików Windows.

Więcej informacji można znaleźć w artykule Access FILESTREAM Data with OpenSqlFilestream.

Zapytanie o kolumny FILESTREAM

Zestawy wierszy schematu w OLE DB nie informują, czy kolumna jest kolumną FILESTREAM. ITableDefinition w OLE DB nie można użyć do utworzenia kolumny FILESTREAM.

Aby tworzyć kolumny FILESTREAM lub wykrywać, które istniejące kolumny to kolumny FILESTREAM, możesz użyć kolumny is_filestream w widoku katalogu sys.columns .

Przykładem jest poniższe pismo pismowe:

-- 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 Kompatybilność

Jeśli Twój klient został skompilowany za pomocą sterownika OLE DB dla SQL Server, a aplikacja łączy się z SQL Server 2012 (11.x) i nowszymi wersjami, to zachowanie varbinary(max) jest zgodne z zachowaniem wprowadzonym przez SQL Server Native Client w SQL Server 2005 (9.x). Oznacza to, że maksymalny rozmiar zwracanych danych jest ograniczony do 2 GB. Dla wartości wyników większych niż 2 GB następuje obcięcie i zwracane jest ostrzeżenie o "prawej obcięciu danych łańcucha".

Gdy zgodność typu danych jest ustawiona na 80, zachowanie klienta jest zgodne z zachowaniem klienta na niższym poziomie.

Dla klientów korzystających z SQLOLEDB lub innych dostawców wydanych przed SQL Server 2005 (9.x), varbinary(max) jest mapowany na obraz.

Comments

  • Aby wysyłać i odbierać wartości varbinary (max) powyżej 2 GB, aplikacja używa DBTYPE_IUNKNOWN w parametrach i rezultatach wiązań in. Dla parametrów dostawca musi wywołać IUnknown::QueryInterface dla ISequentialStream oraz dla wyników zwracających ISequentialStream.

  • W OLE DB sprawdzanie wartości ISequentialStream jest zrelaksowane. Gdy wType znajduje się DBTYPE_IUNKNOWN w strukturzeDBBINDING, sprawdzanie długości można wyłączyć, pomijając DBPART_LENGTH z dwPart lub ustawiając długość danych (przy przesunięciu obLength w buforze danych) na .~0 W takim przypadku dostawca nie sprawdza długości wartości i żąda oraz zwraca wszystkie dane dostępne w strumieniu. Ta zmiana dotyczy wszystkich typów dużych obiektów (LOB) oraz XML, ale tylko wtedy, gdy są podłączone do serwerów SQL Server 2005 (9.x) (lub nowszych). Zapewnia to większą elastyczność dla deweloperów, jednocześnie zachowując spójność i kompatybilność wsteczną dla istniejących aplikacji i serwerów niższego poziomu. Ta zmiana dotyczy wszystkich interfejsów przesyłających dane, głównie IRowset::GetData, ICommand::Execute, oraz IRowsetFastLoad::InsertRow.