SQL Server / SQL Server Image Veritürü İle Çalışmak - I
Uygulamalarımızda kullanmak üzere sakladığımız verilerimizi veritabanına kaydederiz. Kaydedilen bilgiler alfanumerik bir bilgi olabileceği gibi, binary dönüşüm uygulanmış bir resim dosyası zip arşivi ya da ofis dökümanı da olabilir. Bu makale içerisinde, SQL Server veritabanı içerisinde bu binary dönüşüm ile resim dosyalarımızı veritabanı içerisinde nasıl depolayacağımızı ve bunları nasıl sorgulayacağımızı inceleyeceğiz.
SQL Server Binary Data - I
Öncelikle zip dosyası, ofis dökümanı ya da resim içerikleri genellikle veritabanı içerisinde değil de dosya sistemi içerisinde tutulur. Veritabanı içerisinde, dosya sistemi içerisindeki dosyanın adı tutularak, dosyaya erişim sağlanır. Ancak bu durumda birçok sorunlar da beraberinde gelir. Dosyaların veritabanı içerisinde depolanmasının avantajlarından bahsedersek;
Dosya sistemi içerisinde de haklarla uğraşmak zorunda değiliz
Ekleme, silme, güncelleme işlemleri daha kolay
Dosyaları tekrardan adlandırma, aynı isimden birden fazla dosyanın bulunması sorununu ortadan kaldırır.
Taşınması daha basit
Arama işlemlerinde daha fonksiyonel
SQL server içerisinde Image veritipi sadece .jpeg, gif yada bmp şeklinde resim dosyaları için değil, tüm dosya kaynakları için kullanabileceğimiz veri türüdür. SQL Server içerisinde varbinary ve binary veri türleri de maksimum 8000 byte ' a kadar binary veri depolayabileceğimiz veri türleridir. Öyleyse biz de örneğimizde Image veri türünü kullanacağız. Örneğimizde de içerisinde ürün adları, fiyatları ve ürüne ait resimleri depolayacak bir tablo oluşturacağız.
Binary veri depolama
Tablo yapısını oluşturalım
UrunID int identity(1,1) primary key,
Veritabanımızın içerisinde artık ürüne ait ad, fiyat bilgilerini ve bunun yanında ürünün resimini de veritabanımızın içerisinde saklayabileceğimiz tablo yapısını oluşturduk. Şimdi bu tabloya ürün kayıdı ekleyecek prosedürümüzü yazalım
Veri eklemeyi gerçekleştireceğimiz prosedürü oluşturalım
CREATE PROCEDURE urunEkle
INSERT INTO Urunler VALUES (@UrunAd,@UrunFiyat,@UrunResim)
Burada dikkat edilecek nokta, bu yazılan prosedürü uygulamamız içerisinde çalıştırılacağı zaman bizim dosya sistemi içerisinden seçip vereceğimiz ürün resmine, veritabanına eklenmeden önce binary dönüşüm uygulanmasıdır. Bunun için de bize gereken System.IO isim uzayı içerisinde bulunan BinaryReader sınıfından bir Binary Reader nesnesi oluşturmak olacaktır. Daha sonra bu nesnenin ReadBytes metodunu kullanacağız ve bu metottan dönen diziyi tablomuzun UrunResim kolonuna gireceğiz.
Binary içeriği, diğer bilgiler ile birlikte veritabanımızdaki Urunler tablosuna ekleyelim
Dim rd As New System.IO.BinaryReader(fileResim.PostedFile.InputStream)
cmd.CommandText = "urunEkle"
cmd.Parameters.Add("@UrunAd", SqlDbType.NVarChar, 30)
cmd.Parameters("@UrunAd").Value = txtAd.Text
cmd.Parameters("@UrunFiyat").Value = txtFiyat.Text
cmd.Parameters("@UrunResim").Value = rd.ReadBytes(fileResim.PostedFile.ContentLength)
Bu makale ile birlikte, sql server üzerinde arşiv dosyalarımızı, ofis dökümanlarımızı ve resim dosyalarımızı (burada resim kullanıldı) sql server içerisinde nasıl depolayacağımızı ve bunun avantajlarının neler olacağından bahsettik. Ekleme yapabileceğimiz uygulamayı hazırlamış olduk. Bir sonraki makalede, tablomuza eklediğimiz ürün bilgilerini image veri türüne sahip resimler ile birlikte sorgulamak ve getirilecek resimleri tekrar boyutlandırmak olacak.