En iyi yanıtlayıcılar
Merhabalar ;

Soru
-
Yanıtlar
-
Resim dosyasının kendisini veritabanında saklamanın hem veritabanı tarafındaki kayıtların tutarlılığı hem de resme ulaşma açısından daha rahatlık sağlayacağı kesin, fakat performans konusu dosyanın boyutuna bağlı olacaktır. Bu konuda önceden yapılmış testlere göre hazırlanan White Paper'lar var. Son zamanlarda bu konuda tekrar yapılan bir test olduysa, henüz bana denk gelmedi; fakat bahsini ettiğim White Paper'larda örneğin resmin boyutu 256KB'ın altındaysa, performans açısından ve kullanım açısından da veritabanında tutmanın bir sakıncasının olmadığı söyleniyordu. Resmi 1MB'tan yüksekse, muhakkak dosya sisteminde (NTFS) saklaman tavsiye ediliyordu. Bu arada, bu konuda yeni bir White Paper bilen varsa paylaşırsa sevinirim.
Zaten SQL Server 2008 ile birlikte gelen FileStream'in de nedeni bu değil mi? Veritabanındaki kayıtlarla NTFS'teki dosyalar arasında tutarlılığın sağlanması. Eğer FileStream kullanmadan dosya yolunu veritabanında tutar, dosyanın kendisini de NTFS'te tutarsan, dosya silindiliğinde veritabanının bundan haberi olamaz; tam tersi de aynı şekilde, yani veritabanından kaydı sildiğinde NTFS'teki dosyayı uygulaman silemezse, veritabanındaki kayıt silinmiş ama dosya kalmış olur. Halbuki FileStream'de bu işlemler birbiriyle tutarlı ve Transaction şeklindedir, yani ya hep ya hiç. Projende bunu da hesaba katarsan daha sağlıklı olur.
Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com
- Yanıt Olarak Öneren Kenan YILMAZ 8 Eylül 2014 Pazartesi 12:30
- Yanıt Olarak İşaretleyen Serkan Canseven 10 Eylül 2014 Çarşamba 11:49
-
Valla ben uzatmadan cevap vereyim. Yolunu sakla diyenler gecmiste kalmislar. Resim, ses, video vs hepsi gunumuzde birer "veri". Veri de veritabaninda saklanir.
- Yanıt Olarak Öneren Kenan YILMAZ 8 Eylül 2014 Pazartesi 12:30
- Yanıt Olarak İşaretleyen Serkan Canseven 10 Eylül 2014 Çarşamba 11:49
Tüm Yanıtlar
-
Şöyle bir yol izleyebilirsin;
Sayfanıza FileUpload kontrolü ekleyin.
code behind tarafında ise;string resim_Adi = FileUpload1.PostedFile.FileName;//eklenen resmin sadece adını almış olduk FileUpload1.PostedFile.SaveAs(Server.MapPath(@"Yeni Klasör/" + resim_Adi ));//sayfalarının bulunduğu dizinde "Yeni Klasör" adlı bir klasör olduğunu varsayarak o klasörün içerisine upload etmiş olduk.
Daha sonra veritabanına eklerken;
veritabanında ResimYol adlı sütun oluşturduğumuzu varsayalım. Normal bir insert sorgusu yazalım;"insert into tabloAdi (ResimYol) values (@resimyol)"
buradaki parametreye de
( "Yeni Klasör/" + resim_Adi )
stringini atalım. Tabi burada ben yolunu kendim belirledim.Direkt olarak ta yolunu alabilirsiniz o size kalmış.
veritabanına da hem yolunu hem adını ekledikten sonra .İstediğiniz yerden kolaylıkla erişip kullanabilirsiniz.
-
-
Çetin Hocam bazı makalelerde ve çoğu örneklerde resmin yolunu saklamayı siz ise resmin kendisini yanlış anlamadıysam saklamayı tavsiye ediyorsunuz ben resmin yolunu saklayarak yapıyorum peki aradaki fark nedir niçin böyle bir yol izlemeliyiz? Kolay gelsin ;
-
Resmin kendisini saklaman senin için daha rahat olur. Önceden çok yer kaplar falan muhabbeti vardı. Şu anda bu çok problem yaratmıyor. Örneğin müşterilerin resimlerini veritabanında tutman yulunu tutmandan hem daha kolay hem de daha hızlı olur. Bunu kendi projelerimdeki tecrübelerime dayanarak söylüyorum daha fazla bilgi için bununla ilgili makalelere bakabilirsin.
İlla da ben yolunu tutacağım diyorsan;Formumuzda bir adet PictureBox=pcbResim , bir adet buton=btnResim
ve OpenFileDialog ekliyoruz=openFileDialog1
butona tıklandığında OpenFileDialog açılıyor.
burada openfiledialog ile PictureBox a alınan resmin yolu imgPath adlı değişkende tutulur, aynı zamanda resimde bin klosörü altına açtığın resimler klasörüne taşınır. stringimgPath="";
privatevoidbtnResim_Click(object sender, EventArgs e)
{
DialogResultdosyaAc;
dosyaAc = openFileDialog1.ShowDialog();
if(dosyaAc== DialogResult.OK)
{ pcbResim.Image = Image.FromFile(openFileDialog1.FileName);
pcbResim.SizeMode = PictureBoxSizeMode.Zoom;
DialogResultsonuc = MessageBox.Show("Seçilen Resim Program içerisindeki 'resimler' Klasörüne kopyalanacaktır.", "Resim Ekleme", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if(sonuc == DialogResult.OK)
{
FileInfoeskiPath = new FileInfo(openFileDialog1.FileName);
FileInfoyeniPath = eskiPath.CopyTo(Application.StartupPath + "/resimler/" + eskiPath.Name, true);
imgPath = yeniPath.Name;
}
}
}
- Düzenleyen yzengin 6 Eylül 2014 Cumartesi 23:13
-
Resim dosyasının kendisini veritabanında saklamanın hem veritabanı tarafındaki kayıtların tutarlılığı hem de resme ulaşma açısından daha rahatlık sağlayacağı kesin, fakat performans konusu dosyanın boyutuna bağlı olacaktır. Bu konuda önceden yapılmış testlere göre hazırlanan White Paper'lar var. Son zamanlarda bu konuda tekrar yapılan bir test olduysa, henüz bana denk gelmedi; fakat bahsini ettiğim White Paper'larda örneğin resmin boyutu 256KB'ın altındaysa, performans açısından ve kullanım açısından da veritabanında tutmanın bir sakıncasının olmadığı söyleniyordu. Resmi 1MB'tan yüksekse, muhakkak dosya sisteminde (NTFS) saklaman tavsiye ediliyordu. Bu arada, bu konuda yeni bir White Paper bilen varsa paylaşırsa sevinirim.
Zaten SQL Server 2008 ile birlikte gelen FileStream'in de nedeni bu değil mi? Veritabanındaki kayıtlarla NTFS'teki dosyalar arasında tutarlılığın sağlanması. Eğer FileStream kullanmadan dosya yolunu veritabanında tutar, dosyanın kendisini de NTFS'te tutarsan, dosya silindiliğinde veritabanının bundan haberi olamaz; tam tersi de aynı şekilde, yani veritabanından kaydı sildiğinde NTFS'teki dosyayı uygulaman silemezse, veritabanındaki kayıt silinmiş ama dosya kalmış olur. Halbuki FileStream'de bu işlemler birbiriyle tutarlı ve Transaction şeklindedir, yani ya hep ya hiç. Projende bunu da hesaba katarsan daha sağlıklı olur.
Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com
- Yanıt Olarak Öneren Kenan YILMAZ 8 Eylül 2014 Pazartesi 12:30
- Yanıt Olarak İşaretleyen Serkan Canseven 10 Eylül 2014 Çarşamba 11:49
-
Valla ben uzatmadan cevap vereyim. Yolunu sakla diyenler gecmiste kalmislar. Resim, ses, video vs hepsi gunumuzde birer "veri". Veri de veritabaninda saklanir.
- Yanıt Olarak Öneren Kenan YILMAZ 8 Eylül 2014 Pazartesi 12:30
- Yanıt Olarak İşaretleyen Serkan Canseven 10 Eylül 2014 Çarşamba 11:49
-
-
-
-