Dukungan FILESTREAM di Driver OLE DB untuk SQL Server
Berlaku untuk: SQL Server - Hanya Windows
Dimulai dengan SQL Server 2008 (10.0.x), Driver OLE DB untuk SQL Server mendukung fitur FILESTREAM yang disempurnakan. Untuk sampel, lihat FILESTREAM dan OLE DB.
FILESTREAM menyediakan cara untuk menyimpan dan mengakses nilai biner besar, baik melalui SQL Server atau dengan akses langsung ke sistem file Windows. Nilai biner besar adalah nilai yang lebih besar dari 2 gigabyte (GB). Untuk informasi selengkapnya tentang dukungan FILESTREAM yang ditingkatkan, lihat FILESTREAM (SQL Server).
Saat koneksi database dibuka, @@TEXTSIZE
diatur ke -1
(tidak terbatas), secara default.
Anda juga dapat mengakses dan memperbarui kolom FILESTREAM menggunakan API sistem file Windows.
Untuk informasi selengkapnya, lihat Mengakses Data FILESTREAM dengan OpenSqlFilestream.
Kueri untuk Kolom FILESTREAM
Kumpulan baris skema di OLE DB tidak melaporkan apakah kolom adalah kolom FILESTREAM. ITableDefinition
di OLE DB tidak dapat digunakan untuk membuat kolom FILESTREAM.
Untuk membuat kolom FILESTREAM atau mendeteksi kolom mana yang ada adalah kolom FILESTREAM, Anda bisa menggunakan is_filestream
kolom tampilan katalog sys.columns .
Skrip berikut adalah contoh:
-- 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'
);
Kompatibilitas Tingkat Bawah
Jika klien Anda dikompilasi menggunakan Driver OLE DB untuk SQL Server, dan aplikasi terhubung ke SQL Server 2012 (11.x) dan versi yang lebih baru, perilaku varbinary(maks) kompatibel dengan perilaku yang diperkenalkan oleh SQL Server Native Client di SQL Server 2005 (9.x). Artinya, ukuran maksimum data yang dikembalikan dibatasi hingga 2 GB. Untuk nilai hasil yang lebih besar dari 2 GB, pemotongan terjadi dan peringatan "pemotongan kanan data string" dikembalikan.
Saat kompatibilitas jenis data diatur ke 80, perilaku klien konsisten dengan perilaku klien tingkat bawah.
Untuk klien yang menggunakan SQLOLEDB atau penyedia lain yang dirilis sebelum SQL Server 2005 (9.x), varbinary(max) dipetakan ke gambar.
Komentar
Untuk mengirim dan menerima nilai varbinary(max) yang lebih besar dari 2 GB, aplikasi menggunakan
DBTYPE_IUNKNOWN
dalam parameter dan pengikatan hasil. Untuk parameter, penyedia harus memanggil IUnknown::QueryInterface untuk ISequentialStream dan untuk hasil yang mengembalikan ISequentialStream.Untuk OLE DB, pemeriksaan yang terkait dengan nilai ISequentialStream dilonggarkan. Ketika wType berada
DBTYPE_IUNKNOWN
dalamDBBINDING
struct, pemeriksaan panjang dapat dinonaktifkan baik dengan menghilangkanDBPART_LENGTH
dari dwPart, atau dengan mengatur panjang data (pada offset obLength di buffer data) ke~0
. Dalam hal ini, penyedia tidak memeriksa panjang nilai, dan meminta dan mengembalikan semua data yang tersedia melalui aliran. Perubahan ini diterapkan ke semua jenis objek besar (LOB) dan XML, tetapi hanya ketika terhubung ke server SQL Server 2005 (9.x) (atau yang lebih baru). Ini memberikan fleksibilitas yang lebih besar untuk pengembang, sambil mempertahankan konsistensi dan kompatibilitas mundur untuk aplikasi yang ada dan server downlevel. Perubahan ini memengaruhi semua antarmuka yang mentransfer data, terutamaIRowset::GetData
, ,ICommand::Execute
danIRowsetFastLoad::InsertRow
.