OLE DB Driver for SQL Server 中的 FILESTREAM 支援
只適用於 SQL Server - 僅限 Windows。
從 SQL Server 2008 (10.0.x) 開始,OLE DB Driver for SQL Server 支援已增強的 FILESTREAM 功能。 如需範例,請參閱 FILESTREAM 和 OLE DB。
FILESTREAM 提供透過 SQL Server 或直接存取 Windows 檔案系統來儲存及存取大型二進位值的方式。 大型二進位值是大於 2 GB 的值。 如需增強型 FILESTREAM 支援的詳細資訊,請參閱 FILESTREAM (SQL Server)。
開啟資料庫連接時, @@TEXTSIZE
預設會設定為 -1
[無限制]。
也可以使用 Windows 檔案系統 API 來存取及更新 FILESTREAM 資料行。
如需詳細資訊,請參閱 使用 OpenSqlFilestream 存取 FILESTREAM 數據。
查詢 FILESTREAM 資料行
OLE DB 中的架構數據列集不會報告數據行是否為 FILESTREAM 資料行。 ITableDefinition
在 OLE DB 中,無法用來建立 FILESTREAM 數據行。
若要建立 FILESTREAM 數據行或偵測哪些現有數據行是 FILESTREAM 數據行,您可以使用 is_filestream
sys.columns 目錄檢視的數據行。
下列文稿是範例:
-- 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'
);
下層相容性
如果您的用戶端是使用 OLE DB Driver for SQL Server 編譯,而且應用程式會聯機到 SQL Server 2012 (11.x) 和更新版本,則 varbinary(max) 行為與 SQL Server 2005 中 SQL Server Native Client 所導入的行為相容(9.x)。 也就是說,傳回數據的大小上限限製為 2 GB。 對於大於 2 GB 的結果值,會發生截斷,並傳回「字串數據右截斷」警告。
當數據類型相容性設定為80時,客戶端行為會與下層客戶端行為一致。
對於使用 SQLOLEDB 或其他在 SQL Server 2005 (9.x) 之前發行之提供者的用戶端, varbinary(max) 會對應至 映像。
註解
若要傳送和接收 大於 2 GB 的 varbinary(max) 值,應用程式
DBTYPE_IUNKNOWN
會在參數和結果係結中使用 。 若是參數,提供者必須針對 ISequentialStream 和傳回 ISequentialStream 的結果,呼叫 IUnknown::QueryInterface。針對 OLE DB,檢查與 ISequentialStream 值相關的檢查是寬鬆的。 當 wType
DBTYPE_IUNKNOWN
位於 結構中DBBINDING
時,可以省略DBPART_LENGTH
dwPart 來停用長度檢查,或將數據長度設定為 (在數據緩衝區中的位移 obLength ) 設定為~0
。 在此情況下,提供者不會檢查值的長度,而且會要求並傳回透過數據流取得的所有數據。 這項變更會套用至所有大型物件 (LOB) 類型和 XML,但只有在連線到 SQL Server 2005 (9.x) 或更新版本)伺服器時才適用。 這可為開發人員提供更大的彈性,同時維護現有應用程式和下層伺服器的一致性和回溯相容性。 這項變更會影響傳輸資料的所有介面,主要是IRowset::GetData
、ICommand::Execute
和IRowsetFastLoad::InsertRow
。