Prise en charge de FILESTREAM dans OLE DB Driver pour SQL Server
S’applique à : SQL Server - Windows uniquement
À compter de SQL Server 2008 (10.0.x), OLE DB Driver pour SQL Server prend en charge la fonctionnalité FILESTREAM améliorée. Pour obtenir des exemples, consultez FLUX DE FICHIER et OLE DB.
FILESTREAM permet de stocker et d'accéder à de grandes valeurs binaires, soit par le biais de SQL Server, soit par accès direct au système de fichiers Windows. Une grande valeur binaire est une valeur supérieure à 2 gigaoctets (Go). Pour plus d'informations sur la prise en charge FILESTREAM améliorée, consultez FILESTREAM (SQL Server).
Lorsqu'une connexion de base de données est ouverte, la valeur @@TEXTSIZE
est affectée par défaut à -1
(illimité).
Il est également possible d'accéder et de mettre à jour des colonnes FILESTREAM à l'aide d'API de système de fichiers Windows.
Pour plus d’informations, consultez Accéder à des données FILESTREAM avec OpenSqlFilestream.
Interrogation de colonnes FILESTREAM
Les ensembles de lignes de schéma dans OLE DB ne signalent pas si une colonne est une colonne FILESTREAM. ITableDefinition
dans OLE DB ne peut pas être utilisé pour créer une colonne FILESTREAM.
Pour créer des colonnes FILESTREAM ou détecter les colonnes existantes qui sont des colonnes FILESTREAM, vous pouvez utiliser la colonne is_filestream
de l’affichage catalogue sys.columns.
Voici un exemple de script :
-- 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'
);
Compatibilité de bas niveau
Si votre client a été compilé à l’aide d’OLE DB Driver pour SQL Server et que l’application se connecte à SQL Server 2012 (11.x) ou ultérieur), le comportement varbinary(max) est compatible avec le comportement introduit par SQL Server Native Client dans SQL Server 2005 (9.x). Autrement dit, la taille maximale des données retournées est limitée à 2 Go. Pour les valeurs de résultat supérieures à 2 Go, une troncation se produit et un avertissement « Troncation à droite de la chaîne de données » est retourné.
Lorsque la compatibilité de type de données est définie à 80, le comportement client est cohérent avec le comportement client de bas niveau.
Pour les clients qui utilisent SQLOLEDB ou d’autres fournisseurs publiés avant SQL Server 2005 (9.x), varbinary(max) est mappé à l’image.
Commentaires
Pour envoyer et recevoir des valeurs varbinary(max) supérieures à 2 Go, une application utilise
DBTYPE_IUNKNOWN
dans les liaisons de résultat et de paramètre. Pour les paramètres, le fournisseur doit appeler IUnknown::QueryInterface pour ISequentialStream et pour les résultats qui retournent ISequentialStream.Pour OLE DB, la vérification en rapport avec les valeurs ISequentialStream est levée. Lorsque wType est
DBTYPE_IUNKNOWN
dans la structDBBINDING
, la vérification de la longueur peut être désactivée soit en omettantDBPART_LENGTH
de dwPart ou en définissant la durée des données (au niveau du décalage obLength dans le tampon de données) sur~0
. Dans ce cas, le fournisseur ne vérifie pas la longueur de la valeur et demande et retourne toutes les données disponibles par le biais du flux de données. Cette modification est appliquée à tous les types d'objets volumineux (LOB) et XML, mais uniquement en cas de connexion à des serveurs SQL Server 2005 (9.x) (ou ultérieurs). Ceci offre une plus grande souplesse aux développeurs, tout en maintenant la cohérence et la compatibilité descendante des applications existantes et des serveurs de niveau inférieur. Cette modification affecte toutes les interfaces qui transfèrent des données, principalementIRowset::GetData
,ICommand::Execute
etIRowsetFastLoad::InsertRow
.