LINQ to SQL , SQL Server’ın varbinary tipini desteklemektedir.Bu sayede veritabana binary olarak dosyalarımızı kaydedebiliriz.Örneğin bir web sitesinde veritabanına kullanıcı profil resimlerininin path’ini  kaydetmek yerine resmi binary olarak kaydedebiliriz.

Veritabanına dosya kaydetme

İlk olarak veritabanımızı oluşturmamız gerekli.Ben kendi veritabanımda Store isimli bir tablo oluşturdum.Tablonun design’ı aşağıdaki gibidir.

Store tablomu tasarladıktan sonra projeme Add New Item diyerek yeni bir LINQ to SQL sınıfı ekliyorum.Daha sonra Server Explorer penceresinden Store tablomu bu sınıfa sürükleyip bırakıyorum.Bu sayfayı kaydedip çıktıktan sonra  sıra geldi dosyamızı veritabanına kaydetmeye.Aşağıdaki kod ile artık dosyamızı veritabanına binary olarak kaydedebiliriz.

NorthWindDataContext ctx = new NorthWindDataContext();

//Store tipinde yeni bir Entity oluşturuyoruz

var stored = new Store();

//Kaydedilecek resmin yolu

string path = @"C:\Users\KullanıcıAdı\Desktop\lf.jpg";

//Kaydedilecek dosyayı byte dizi şeklinde okuyoruz

stored.Binary = File.ReadAllBytes(path);

//Dosyamızın ismini alıp kaydediyoruz

stored.Filename = Path.GetFileName(path);

//Artık oluşturduğumuz entity'yi veritabanına ekliyoruz

ctx.Stores.InsertOnSubmit(stored);

//DataContex'imizde değişiklik olduğu için

//bu değişikliği veritabanına kaydediyoruz

ctx.SubmitChanges();

 

Yukarıdaki kodun gayet açık olduğunu düşünüyorum üstelik her satırın ne iş yaptığını yorum satırlarında da belirttim.İsterseniz bir de kaydettiğimiz bu verileri veritabanından nasıl çekeceğimize bakalım.

Veritabanından binary dosya okuma

Binary olarak kaydettiğimiz verileri diske geri yazmak da kaydetmek kadar kolay.Bunu yaparken ToArray() metodu çok işimize yarayacak:)

 

string path = @"C:\temp";

var file = p.Stores.First();

File.WriteAllBytes(Path.Combine(path, file.Filename), file.Binary.ToArray());

 

Gördüğünüz gibi birkaç satırla  veritabanına kaydettiğimiz binary dosyamızı diske geri yazabiliriz.File sınıfının WriteAllBytes metodunu ve ToArray metodu ile bunu yapabiliriz.Önemli bir nokta veritabanında binary tipinde bir kolon oluşturduğunuzda max 8000 olduğudur.Eğer büyük bir dosya kaydetmeye çalışırsanız “binary data would be truncated” şeklinde bir hata alırsınız.Binary datanın küçültülmesi gerektiği uyarısını veren bu hatayı almamak için önce dosya boyutu kontrolü yapmanızı tavsiye ederim.Kolay gelsin.

About the Author