Supporto FILESTREAM nel driver OLE DB per SQL Server
Si applica a: SQL Server - solo Windows
A partire da SQL Server 2008 (10.0.x), OLE DB Driver per SQL Server supporta la funzionalità FILESTREAM avanzata. Per esempi, vedere FILESTREAM e OLE DB.
FILESTREAM consente di archiviare e accedere a valori binari di grandi dimensioni mediante SQL Server o accesso diretto al file system di Windows. Un valore binario di grandi dimensioni è un valore superiore a 2 gigabyte (GB). Per altre informazioni sul supporto FILESTREAM avanzato, vedere FILESTREAM (SQL Server).
Quando viene aperta una connessione al database, @@TEXTSIZE
è impostata su -1
(illimitato), per impostazione predefinita.
È anche possibile accedere alle colonne FILESTREAM e aggiornarle utilizzando l'API del file system di Windows.
Per altre informazioni, vedere Accedere ai dati FILESTREAM con OpenSqlFilestream.
Query per colonne FILESTREAM
I set di righe dello schema in OLE DB non segnalano se una colonna è una colonna FILESTREAM. ITableDefinition
in OLE DB non può essere usato per creare una colonna FILESTREAM.
Per creare colonne FILESTREAM o per rilevare quali colonne esistenti sono colonne FILESTREAM, è possibile usare la is_filestream
colonna della vista del catalogo sys.columns .
Di seguito è riportato uno script di esempio:
-- 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à con le versioni precedenti
Se il client è stato compilato usando OLE DB Driver per SQL Server e l'applicazione si connette a SQL Server 2012 (11.x) e versioni successive, il comportamento varbinary(max) è compatibile con il comportamento introdotto da SQL Server Native Client in SQL Server 2005 (9.x). Ovvero, la dimensione massima dei dati restituiti è limitata a 2 GB. Per i valori dei risultati maggiori di 2 GB, si verifica il troncamento e viene restituito un avviso di troncamento a destra dei dati stringa.
Quando la compatibilità dei tipi di dati è impostata su 80, il comportamento del client è coerente con il comportamento del client di livello inferiore.
Per i client che usano SQLOLEDB o altri provider rilasciati prima di SQL Server 2005 (9.x), viene eseguito il mapping di varbinary(max) all'immagine.
Commenti
Per inviare e ricevere valori varbinary(max) maggiori di 2 GB, un'applicazione usa
DBTYPE_IUNKNOWN
nei binding di parametri e risultati. Per i parametri il provider deve chiamare IUnknown::QueryInterface per ISequentialStream e per i risultati che restituiscono ISequentialStream.Per OLE DB, il controllo relativo ai valori ISequentialStream è rilassato. Quando wType si trova
DBTYPE_IUNKNOWN
nelloDBBINDING
struct, il controllo della lunghezza può essere disabilitato omettendoDBPART_LENGTH
da dwPart o impostando la lunghezza dei dati (in corrispondenza dell'offset obLength nel buffer di dati) su~0
. In questo caso, il provider non controlla la lunghezza del valore e richiede e restituisce tutti i dati disponibili tramite il flusso. Questa modifica viene applicata a tutti i tipi LOB (Large Object) e XML, ma solo quando si è connessi a server SQL Server 2005 (9.x) (o versioni successive). Ciò garantisce una maggiore flessibilità per gli sviluppatori, mantenendo al contempo la coerenza e la compatibilità con le versioni precedenti per le applicazioni esistenti e i server di livello inferiore. Questa modifica influisce su tutte le interfacce che trasferiscono dati, principalmenteIRowset::GetData
,ICommand::Execute
eIRowsetFastLoad::InsertRow
.