Pazartesi , 20 Kasım 2017

Resimlerin SQL Server Tablolarına Kaydedilmesi

Resim, müzik hatta Word, Excel gibi dosyaların yani yapısal olmayan verilerin(unstructured data) veritabanında Binary formatta tutulması tavsiye edilmese bile bazen kaçınılmaz bir ihtiyaç haline gelebiliyor. Örneğin sık karşılaşılan resim dosyalarının SQL Serverda bir tabloda Binary formatta tutulması yerine performans için bu resimlerin ortak erişilebilen paylaştırılmış bir klasörde tutulması ve SQL Serverda bu resimlerin fiziksel yolunun tutulması daha performanslı bir çözüm olacaktır. Fakat böyle bir durumda herkesin eriştiği paylaştırılmış klasördeki resimlerin adının değiştirilmesi ya da silmesi gibi durumlara engel olamayız. İşte bu gibi durumların önüne geçmek için resim dosyaları gibi yapısal olmayan verilerde tablolarımızda tutulabilir.

SQL Serverda resim gibi yapılan olmayan verileri Binary formatta tablolarımızda tutmanın en kolay yolu OPENROWSET komutunu BULK ve SINGLE_BLOB adlı iki seçenek ile kullanmaktır. Tabi bildiğimiz gibi tablomuzda Binary formatlı bir veri tutacağımız için tablomuzdaki ilgili kolunun tipi de VarBinary(Max) olmalıdır. Şimdi yapısal olmayan verilerimiz tutmak için aşağıdaki gibi bir tablo oluşturalım.

CREATE TABLE ProductImageOrFile(
FileID int identity(1,1) not null primary key,
FileName nvarchar(100),
FileContent varbinary(max)
)

Yukarıdaki tablomuz üç kolondan oluşmaktadır. İlk kolonumuz Binary formatta tutacağımız dosyamızın numarasını temsil ederken ikinci kolon dosyanın adını, son kolon da dosyanın Binary formattaki karşılığını tutmaktadır. Tablomuzu oluşturduktan sonra OPENROWSET komutunu BULK ve SINGLE_BLOB seçenekleriyle kullanarak tablomuza kayıt ekleyelim. Binary formatta ekleyeceğim kayıtların yani dosyaların C:\TestFile adlı klasörde bulunan aşağıdaki iki dosya olduğunu varsayalım ve kayıt ekleme için gerekli TSQL kodumuzu yazalım.

1

İlk olarak resim dosyasını tablomuza ekleyelim.

INSERT INTO ProductImageOrFile(FileName, FileContent)
SELECT 'Mickey Mouse Resmi', *
FROM OPENROWSET(BULK N'C:\TestFile\mickeymouse.jpg', SINGLE_BLOB) Dosya;

Şimdi tablomuzdaki verimizi kontrol edelim.

select * from ProductImageOrFile

2

 

Gördüğümüz gibi yukarıda fiziksel dosya yolunu belirmiş olduğum resim dosyası kullandığım SINGLE_BLOB parametresi ile yukarıdaki gibi binary formata çevrildi ve tablomuza kaydedildi. Sonraki adım olarak bir Word dosyasını kaydedelim. Aslında SQL Server açısından kaydedilen dosyanın formatı önemli değildir çünkü SQL Server her ikisini de yapısal olamayan veri olarak Binary formatta tutmaktadır. Şimdi diğer dosyamızı da tablomuza ekleyelim.

INSERT INTO ProductImageOrFile
SELECT 'İsmail ADAR Cv',*
FROM OPENROWSET(BULK N'C:\TestFile\ismailadar_Cv.doC',SINGLE_BLOB) Dosya;

Yazdığımız ikinci insert ifadesinde de gördüğümüz gibi dosya tipleri ve uzantıları farklı olmasına rağmen aynı şekilde tablomuza kaydetmiş olduk. Şimdi tablomuzun son haline bakalım.

select * from ProductImageOrFile

3

 

Yukarıda gördüğümüz gibi OPENROWSET komutuyla beraber yapısal olmayan verilerimiz yani diğer ifadeyle dosyalarımızı SQL Server tablolarımızda tutabiliyoruz.

Hakkında ismailadar

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>