Makale Özeti

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.

Makale

SQL Server Binary Data - 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.

Ö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

CREATE TABLE Urunler
(
UrunID
int identity(1,1) primary key,
UrunAd
nvarchar(30),
UrunFiyat
money,
UrunResim
image
)

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
@UrunAd
nvarchar(30),
@UrunFiyat
money,
@UrunResim
image
AS
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 cmd As New SqlClient.SqlCommand

Dim rd As New System.IO.BinaryReader(fileResim.PostedFile.InputStream)

cmd.Connection = conn

cmd.CommandType = CommandType.StoredProcedure

cmd.CommandText = "urunEkle"

cmd.Parameters.Add("@UrunAd", SqlDbType.NVarChar, 30)

cmd.Parameters("@UrunAd").Value = txtAd.Text

cmd.Parameters.Add("@UrunFiyat", SqlDbType.Money)

cmd.Parameters("@UrunFiyat").Value = txtFiyat.Text

cmd.Parameters.Add("@UrunResim", SqlDbType.Image)

cmd.Parameters("@UrunResim").Value = rd.ReadBytes(fileResim.PostedFile.ContentLength)

conn.Open()

cmd.ExecuteNonQuery()

conn.Close()

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.

Umarım faydalı olmuştur. Her türlü görüş ve önerileriniz için bana ulaşabilirsiniz

Volkan UÇARKAYA

vucarkaya@hotmail.com

Örnek Uygulama