Bugun ki yazımda asp.net te datalist gibi bir kontrole resim nasıl eklenir,bu resimler nasıl gösterilir , veritabanında resimler nasıl tutulmalıdır gibi konularda bilgilerimi paylaşmak isterim. Genelde , veritabanına resim ekleme konusundan insanlar şöyle bir yanılgıya düşüyor.Veritabanında resmin yolunu tutmak daha iyidir , kendisini tutmamalıyız.Eğer resmi direk binary formatta tutarsak veritabanı yavaşlar.Eğer Sql Server gibi bir veritabanı yönetim sistemi kullanıyorsanız , bu Sql Server'a hakaret bence.Siz veritabanında binlerce resim tutacaksanız ve bu resimlerin sayısıda dinamik olarak devamlı artacaksa , yani ne kadar resim tutacağınızıda kestiremiyorsanız o zaman resmi yolunu tutun ama diyelim ki bir şirkette çalışanların resimlerini tutacaksanız ve bu resimlerin toplam sayısıda maximum 500 e falan çıkacak.Ben böyle bir durumda hiç düşünmeden resmi binary formatta database'e kaydederim.Resmi kaydetmeden öncede resmin boyutunu genişlik ve yükseklik olarak belli bir standartta sokarım.Binary olarak kayıt etmek istememde ki neden ise bu yolun , path tutmaktan daha güvenli bir yol olmasından kaynaklanmaktadır.
Şimdi ilk işlem olarak Calisanlar ve CalişanlarResim adında 2 tane tablo oluşturalım ve bu tablolara biraz kayıt girelim.

Şimdi bir web projesi açalım ve üzerine 1 adet Datalist kontrolü atalım ;

ve bir image ve linkbutton dan oluşan aşağıdaki gibi bir itemTemplate tasarlayalım.

end template editing dediğinizde görüntüsü varsayılan olarak vertical (dikey) gelecek onu yatay yapın ve Repeat columns özelliğine 3 değerini atayın ;

resimleri göstereceğimiz alanın tasarımını yaptık , bu sayfaya birde resimleri göster diye buton atıcaz ama şuan ortada ne resim var nede kayıt.O yüzden şimdi yeni bir sayfa açıp orada resim ekleme işini halledelim.buraya sonra tekrarden dönücez ;
Resim eklemek için fileUpload kontrolünü kullanıyoruz.

textboxlara verdiğim isimleri resime bakarak görebilirsiniz..fileUpload kontrolünün güzel yanı , dosyayı disk üzerinden seçtikten sonra FileBytes property si üzerinden resme byte dizisi olarak kolayca ulaşabilmemiz.Böyle bir property olmasa ,resmi byte dizisine çevirmek için ekstradan kod yazmamız gerekicekti.Kayit ekleme işleminde , textboxların yanında validasyon kontrollerinin kullanılması yerinde olacaktır böylece kullanıcı bütün textbox lara veri girmek zorunda olacaktır , butona basmak için.Biz burada böyle bir önlem almadık,ama normalde alınması gerekir.
Şimdi insert işlemi yapmak için bir sp yazalım. Data sonra linq kullanarak bu sp'yi bir methoda çeviricez.Aslına bakarsanız linq le sorgu oluşturmaktan hiç zevk almıyorum,linq in en sevdiğim yanı sp'lerimi methoda çevirmesi : ))

Sp mizde hazır olduğuna göre.Şimdi uzun uzun ado.net işlemleri yapmıycaz , işimizi kısa yoldan linq to sql class'i ekleyerek çözücez.Projeye add new item dan linq to sql class ı ekledikten sonra , server explorer dan sp nizi bulun ve beyaz formun üzerine atın.bundan sonra butonun altına yazmanız gereken kod sadece şu kadar ;

kayit ekle dedik ve texbox ların içeriklerini ve resmi byte dizisi olarak ekledik.
artık kaydımızı rahatlıkla girebiliriz : ))

resmide ekledik.şimdi sıra geldi resimleri göstermeye : ) asp.net de resimleri göstermek için ayrı bir resim sayfası hazırlanır,bu sayfa kimsenin görmiyceği bilmiyceği bir sayfadır.Datalist , resmi bulmak için her seferinde bu sayfaya gidecek.Ve biz bu sayfaya querry string yolu ile Calisanimizin ıd değerini yollıycaz.Ve o sayfada bu id ye ait üyenin resmi byte dizisi olarak bulunuyor olacak.Datalist kaç tane resim var ise o resimler için sırayla , bir döngü gibi bu sayfanın load una gidip gidip gelecek.böylece resimlerimiz eklenmiş olacak.
Öncelikli olarak datalist'e gerekli olan kayıtları ekleyelim, evalle id yi bağlayalım, sonrada resim sayfamızı tasarlayalım ;


html 'e verileri bağlamak için biraz inline takılmamız gerekiyor.ama eğer datasource kontrollerini kullanırsanız,o sizin yerinize evalleri bağlıyor.ama işiniz çok acil değilse , bunları elle yazmak ek makul olanı.
resim sayfamız ise ;

evet uygulamamızın son hali
