none
Merhabalar ; RRS feed

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
    7 Eylül 2014 Pazar 11:36
  • 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
    7 Eylül 2014 Pazar 20:35

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.



    6 Eylül 2014 Cumartesi 03:10
  • insert ya da update kullanabilirsin. Resmin yolu yerine kendisini saklamak daha mantikli.
    6 Eylül 2014 Cumartesi 09:29
  • Ç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 ;
    6 Eylül 2014 Cumartesi 18:49
  • 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
    6 Eylül 2014 Cumartesi 23:03
  • 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
    7 Eylül 2014 Pazar 11:36
  • 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
    7 Eylül 2014 Pazar 20:35
  • Ekrem bey ve Çetin bey değerli bilgileriniz için teşekkürler iyi çalışmalar diliyorum;
    8 Eylül 2014 Pazartesi 12:30
  • Yazımda bahsettiğim Microsoft dokümanını buldum. 2006 senesinde yazılmış. Okumak istersen adresi şöyle: 

    http://research.microsoft.com/apps/pubs/?id=64525


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com

    8 Eylül 2014 Pazartesi 12:37
  • Makaleler icin tesekkurler. Gorulen o ki performans acisindan da database de tutmak daha iyi (2008 ve sonrasinda).
    8 Eylül 2014 Pazartesi 13:22