FILESTREAM-Unterstützung im OLE DB-Treiber für SQL Server

Gilt für:SQL Server – nur Windows

OLE DB-Treiber herunterladen

Ab SQL Server 2008 (10.0.x) unterstützt der OLE DB-Treiber für SQL Server die erweiterte FILESTREAM-Funktion. Beispiele finden Sie unter FILESTREAM und OLE DB.

Die FILESTREAM-Funktion bietet eine Möglichkeit, große binäre Werte zu speichern und entweder über SQL Server oder durch direkten Zugriff auf das Windows-Dateisystem darauf zuzugreifen. Ein großer Binärwert ist ein Wert, der größer als 2 Gigabyte (GB) ist. Weitere Informationen zur verbesserten FILESTREAM-Unterstützung finden Sie unter FILESTREAM (SQL Server).

Wenn eine Datenbankverbindung geöffnet wird, wird @@TEXTSIZE standardmäßig auf -1 (unbegrenzt) festgelegt.

Es ist auch möglich, mit Windows-Dateisystem-APIs auf FILESTREAM-Spalten zuzugreifen und diese zu aktualisieren.

Weitere Informationen finden Sie unter Zugreifen auf FILESTREAM-Daten mit OpenSqlFilestream.

Abfragen von FILESTREAM-Spalten

Schemarowsets in OLE DB geben nicht an, ob eine Spalte eine FILESTREAM-Spalte ist. ITableDefinition in OLE DB kann nicht verwendet werden, um eine FILESTREAM-Spalte zu erstellen.

Mithilfe der is_filestream-Spalte der sys.columns-Katalogsicht können Sie FILESTREAM-Spalten erstellen oder ermitteln, welche der vorhandenen Spalten FILESTREAM-Spalten sind.

Das folgende Skript ist ein Beispiel:

-- 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'
    );

Kompabilität mit früheren Versionen

Wenn der Client mit dem OLE DB-Treiber für SQL Server kompiliert wurde und die Anwendung eine Verbindung mit SQL Server herstellt (SQL Server 2012 (11.x) und höher), ist das Verhalten von varbinary(max) mit dem vom SQL Server Native Client in SQL Server 2005 (9.x) eingeführten Verhalten. Das heißt, die Maximalgröße der zurückgegebenen Daten ist auf 2 GB beschränkt. Ergebniswerte, die größer als 2 GB sind, werden abgeschnitten, und es wird die Warnung „Zeichenfolgendaten werden rechts abgeschnitten“ zurückgegeben.

Wenn Datentypkompatibilität auf 80 festgelegt wird, ist das Clientverhalten mit dem Verhalten von Clients früherer Versionen konsistent.

Bei Clients, die SQLOLEDB oder andere Anbieter verwenden, die vor SQL Server 2005 (9.x) veröffentlicht wurden, wird varbinary(max) dem Datentyp image zugeordnet.

Kommentare

  • Um varbinary(max) -Werte über 2 GB zu senden und zu empfangen, verwendet eine Anwendung DBTYPE_IUNKNOWN in Parameter- und Ergebnisbindungen. Der Anbieter muss für Parameter IUnknown::QueryInterface für ISequentialStream und für Ergebnisse abrufen, die ISequentialStream zurückgeben.

  • Für OLE DB wird die auf ISequentialStream-Werte bezogene Überprüfung gelockert. Wenn wType in der DBBINDING-Struktur DBTYPE_IUNKNOWN ist, kann die Längenüberprüfung deaktiviert werden, indem DBPART_LENGTH von dwPart ausgelassen wird oder die Länge der Daten (bei Offset obLength im Datenpuffer) auf ~0 festgelegt wird. In diesem Fall überprüft der Provider die Länge des Werts nicht und fordert alle Daten an (oder gibt sie zurück), die über den Datenstrom zur Verfügung stehen. Diese Änderung wird auf alle LOB-Typen (Large Object) und auf XML angewendet, allerdings nur, wenn eine Verbindung zu SQL Server 2005 (9.x)-Servern (oder höher) besteht. Auf diese Weise erhalten Entwickler eine höhere Flexibilität, während sie die Konsistenz und Abwärtskompatibilität für vorhandene Anwendungen und Downlevelserver beibehalten. Diese Änderung wirkt sich auf alle Schnittstellen aus, die Daten übertragen, hauptsächlich IRowset::GetData, ICommand::Executeund IRowsetFastLoad::InsertRow.