none
Profil Resmini Veritabanına kayıt etmek RRS feed

Yanıtlar

  • Kullandigin database'e gore degisir. SQL server ile varbinary(max) olarak kaydedebilirsin. Link olarak kaydetmek sagliksiz olur. SQL server icin, varolan ImageDb'den okuyan ve yeni bir database'in yeni bir tablosuna yazan kod ornegi asagida (FileStream attribute kullanirsan, arka planda SQL server dosyayi bir dizine yazip, o dizini kendisi kontrol ediyor, senin yerine link kullaniyor diyebiliriz) :

    void Main()
    {
      byte[] mySavedPic; 
      using(SqlConnection connection = new SqlConnection(@"server=.\SQLExpress;Trusted_connection=yes;Database=ImageDb"))
      {
        SqlCommand cmd = new SqlCommand("select top 1 PersonPicture from  ImageTable1",connection);
        connection.Open();
        mySavedPic = (byte[])cmd.ExecuteScalar();
        connection.Close();
      }
      MemoryStream ms = new MemoryStream(mySavedPic);
      
      Form f = new Form{ Height=300, Width=700};
      PictureBox p1 = new PictureBox{ 
        SizeMode = PictureBoxSizeMode.StretchImage, 
        Top=10,Left=10, Height=200, Width=300};
      PictureBox p2 = new PictureBox{ 
        SizeMode = PictureBoxSizeMode.StretchImage, 
        Top=10,Left=350, Height=200, Width=300};
      
      p1.Image = Image.FromStream(ms);
      f.Controls.Add( p1 );
      f.Controls.Add( p2 );
      f.ShowDialog();
    
      using(SqlConnection connection = new SqlConnection(@"server=.\SQLExpress;Trusted_Connection=yes;"))
      {
        connection.Open();
        new SqlCommand("create database PicSample",connection).ExecuteNonQuery();
        new SqlCommand("create table PicSample..PicSample (PicId int identity not null primary key, myPic varbinary(max));",connection).ExecuteNonQuery();
        
        MemoryStream ms1 = new MemoryStream();
        p1.Image.Save(ms1, p1.Image.RawFormat);
        var imageBytes = ms1.ToArray();
        
        var cmd = new SqlCommand("insert into PicSample..PicSample (myPic) values (@myPic)",connection);
        cmd.Parameters.AddWithValue("@myPic", imageBytes);
        cmd.ExecuteNonQuery();
        connection.Close();
      }
    
      DataTable tbl = new DataTable();
      var adapter = new SqlDataAdapter("select top 1 * from PicSample",@"server=.\SQLExpress;Trusted_Connection=yes;Database=PicSample");
      adapter.Fill(tbl);
      
      p2.Image = Image.FromStream(new MemoryStream((byte[])tbl.Rows[0]["myPic"]));
      f.ShowDialog();
    }

    Bu da Mongodb database gridfs ile:

    void Main()
    {
      MongoDatabase db = new MongoClient("mongodb://localhost").GetServer().GetDatabase("Mongo_Files");
     
    var dosya = @"c:\dizinadi\resimadi.png";
    db.GridFS.Upload(dosya);
    }

    Oku:

    MongoDatabase db = new MongoClient("mongodb://localhost").GetServer().GetDatabase("Mongo_Files");
    
    string original = @"c:\\dizinadi\\resimadi.png";
    string copyTo = @"c:\DizinAdi\xxx.png";
    
    var query = new QueryDocument("filename", new BsonRegularExpression(new Regex(original,RegexOptions.IgnoreCase)));
    var stored = db.GridFS.FindOne( query );
    if (stored != null)
    {
      db.GridFS.Download(copyTo, stored.Name);
    }
    

    • Yanıt Olarak İşaretleyen ByAvora 9 Haziran 2015 Salı 14:01
    9 Haziran 2015 Salı 12:38
  • Yeni baslamissin gibi bir his uyandi icimde. Form ve PictureBox System.Windows.Forms namespace'te. Sen ASP.Net kullaniyorsun diye fark etmez, ben ornegi windows forms ile verdim o kadar. ASP.Net Image ya da normal Html img ile yapman gereken temelde base64 encoding. Birden fazla yolu var, yollardan birisi burada detayli anlatiliyor.

    heh saolun hocam bende bunu arıyordum, aslında sorunu querystring ile resmin idsini ResimDetay.ashx olan sayfaya gönderip imageurl yede Resimdetay.ashx?id verip yapıyordum da bana gereksiz gelmişti olduğu yerde okuması lazım diye bu işimi gördü teşekkürler.

    <asp:Image ImageUrl='<%# "data:image/jpg;base64," + Convert.ToBase64String((byte[])Eval("IMG_DATA")) %>' />  

    • Yanıt Olarak İşaretleyen ByAvora 11 Haziran 2015 Perşembe 12:04
    11 Haziran 2015 Perşembe 12:04

Tüm Yanıtlar

  • Kullandigin database'e gore degisir. SQL server ile varbinary(max) olarak kaydedebilirsin. Link olarak kaydetmek sagliksiz olur. SQL server icin, varolan ImageDb'den okuyan ve yeni bir database'in yeni bir tablosuna yazan kod ornegi asagida (FileStream attribute kullanirsan, arka planda SQL server dosyayi bir dizine yazip, o dizini kendisi kontrol ediyor, senin yerine link kullaniyor diyebiliriz) :

    void Main()
    {
      byte[] mySavedPic; 
      using(SqlConnection connection = new SqlConnection(@"server=.\SQLExpress;Trusted_connection=yes;Database=ImageDb"))
      {
        SqlCommand cmd = new SqlCommand("select top 1 PersonPicture from  ImageTable1",connection);
        connection.Open();
        mySavedPic = (byte[])cmd.ExecuteScalar();
        connection.Close();
      }
      MemoryStream ms = new MemoryStream(mySavedPic);
      
      Form f = new Form{ Height=300, Width=700};
      PictureBox p1 = new PictureBox{ 
        SizeMode = PictureBoxSizeMode.StretchImage, 
        Top=10,Left=10, Height=200, Width=300};
      PictureBox p2 = new PictureBox{ 
        SizeMode = PictureBoxSizeMode.StretchImage, 
        Top=10,Left=350, Height=200, Width=300};
      
      p1.Image = Image.FromStream(ms);
      f.Controls.Add( p1 );
      f.Controls.Add( p2 );
      f.ShowDialog();
    
      using(SqlConnection connection = new SqlConnection(@"server=.\SQLExpress;Trusted_Connection=yes;"))
      {
        connection.Open();
        new SqlCommand("create database PicSample",connection).ExecuteNonQuery();
        new SqlCommand("create table PicSample..PicSample (PicId int identity not null primary key, myPic varbinary(max));",connection).ExecuteNonQuery();
        
        MemoryStream ms1 = new MemoryStream();
        p1.Image.Save(ms1, p1.Image.RawFormat);
        var imageBytes = ms1.ToArray();
        
        var cmd = new SqlCommand("insert into PicSample..PicSample (myPic) values (@myPic)",connection);
        cmd.Parameters.AddWithValue("@myPic", imageBytes);
        cmd.ExecuteNonQuery();
        connection.Close();
      }
    
      DataTable tbl = new DataTable();
      var adapter = new SqlDataAdapter("select top 1 * from PicSample",@"server=.\SQLExpress;Trusted_Connection=yes;Database=PicSample");
      adapter.Fill(tbl);
      
      p2.Image = Image.FromStream(new MemoryStream((byte[])tbl.Rows[0]["myPic"]));
      f.ShowDialog();
    }

    Bu da Mongodb database gridfs ile:

    void Main()
    {
      MongoDatabase db = new MongoClient("mongodb://localhost").GetServer().GetDatabase("Mongo_Files");
     
    var dosya = @"c:\dizinadi\resimadi.png";
    db.GridFS.Upload(dosya);
    }

    Oku:

    MongoDatabase db = new MongoClient("mongodb://localhost").GetServer().GetDatabase("Mongo_Files");
    
    string original = @"c:\\dizinadi\\resimadi.png";
    string copyTo = @"c:\DizinAdi\xxx.png";
    
    var query = new QueryDocument("filename", new BsonRegularExpression(new Regex(original,RegexOptions.IgnoreCase)));
    var stored = db.GridFS.FindOne( query );
    if (stored != null)
    {
      db.GridFS.Download(copyTo, stored.Name);
    }
    

    • Yanıt Olarak İşaretleyen ByAvora 9 Haziran 2015 Salı 14:01
    9 Haziran 2015 Salı 12:38
  • En yakın zamanda yazdığınız kodu deneyeceğim, Teşekkürler :)
    9 Haziran 2015 Salı 14:01
  • Hocam ben sizin verdiğiniz kod parçasını şöyle düzenledim çalışıyor fakat yapmak istediğim tam bu değil eksikler var önce kodu paylaşıyım

    //Bu kısım fileupload'dan gelen resmi kayıt etmek için,
    
                if (FileUpload1.HasFile)
                {
                    Byte[] bytDizi = FileUpload1.FileBytes;
                    MemoryStream ms = new MemoryStream(bytDizi);
    
                    ms.Read(bytDizi, 0, bytDizi.Length);
                    ms.Close();
    
                    int a = dbcontext.ExecuteNonQuery("insert into resimler (profil) values (@profil)", new SqlParameter[]{
                    new SqlParameter("@profil", SqlDbType.VarBinary, bytDizi.Length, ParameterDirection.Input, false,0,0, null, DataRowVersion.Current, bytDizi)});
    
                    if (a > 0)
                    {
                        Label1.Text = "İşlem Tamamlandı"; 
                    }
                }

    Bu kısım ise okuması için

    var adapter = dbcontext.DataAdapter("SELECT * FROM resimler where ID=1");
    
    Byte[] bytdizi = new Byte[0]; 
    bytdizi = (Byte[])(adapter.Rows[0]["profil"]);
    
    MemoryStream bellekAkisNesnesi = new MemoryStream(bytdizi);
    
    Response.OutputStream.Write(bytdizi, 0, bytdizi.Length);
    ben resimini kayıt ederken hem dosya boyutunu hemde resmin pixel boyutunu ayarlamak istiyorum nasıl yapabilirim ?

    10 Haziran 2015 Çarşamba 11:59
  • Onlari ayrica yarattigin alanlara yazabilirsin.
    10 Haziran 2015 Çarşamba 12:45
  • Onlari ayrica yarattigin alanlara yazabilirsin.
    Nasıl yani ? ben kayıt edilen resmin veritabanında fazla yer kaplamaması için otomotik boyutlandırılması yada resim yüklenirken uyarı vermesini istiyorum nasıl yapabilirim ?
    10 Haziran 2015 Çarşamba 12:55
  • Ah o baska bir sey. Onu Image classi ile yapabilirsin.
    10 Haziran 2015 Çarşamba 14:29
  • Ah o baska bir sey. Onu Image classi ile yapabilirsin.

    Peki hocam ben resmi yazdırmak için oku.aspx diye ayrı bi sayfa kullanıyorum ve image1 in url sinede

    oku.aspx veriyorum bunu diğer sayfadan okumadan olduğu yerde nasıl okutturabilirim ?

    yani Image1 Default.aspx de ID'si 1 olan resmide oku.aspx de yazdırıyorum default.aspx deki resimin urlsinede oku.aspx verince resim geliyor ama ben ayrı sayfa olmadan direk default.aspx de okusun istiyorum ?

    10 Haziran 2015 Çarşamba 16:54
  • O zaman kodu oraya yaz (Turkcesi ne demek istedigini hic anlamadim:).
    10 Haziran 2015 Çarşamba 17:00
  • O zaman kodu oraya yaz (Turkcesi ne demek istedigini hic anlamadim:).
    Hocam bende anlamadım zaten şuan çıkmaz içindeyim kafam patladı :D :D
    10 Haziran 2015 Çarşamba 17:08
  • O zaman kodu oraya yaz (Turkcesi ne demek istedigini hic anlamadim:).

    Hocam bende anlamadım zaten şuan çıkmaz içindeyim kafam patladı :D :D
    Hocam şöyle diyeyim o zaman veritabanına kayıt ettiğim varbinary resmi nasıl okutabilirim ?
    10 Haziran 2015 Çarşamba 17:09
  • Byte[] bytdizi = new Byte[0];
    bytdizi = (Byte[])(adapter.Rows[0]["Logo"]);
    MemoryStream bellekAkisNesnesi = new MemoryStream(bytdizi);
    Okuması için hazırladığım kod parçası bu nasıl image1 içine basarım resmi ?
    10 Haziran 2015 Çarşamba 17:11
  • En yukarida kod ornegi var bunu yapan.
    10 Haziran 2015 Çarşamba 17:33
  • En yukarida kod ornegi var bunu yapan.
    sizin kod parçasını çalıştıramadım PictureBox ve Form kütüphanesi yok bende altını çiziyorlar.
    10 Haziran 2015 Çarşamba 17:46
  • Yeni baslamissin gibi bir his uyandi icimde. Form ve PictureBox System.Windows.Forms namespace'te. Sen ASP.Net kullaniyorsun diye fark etmez, ben ornegi windows forms ile verdim o kadar. ASP.Net Image ya da normal Html img ile yapman gereken temelde base64 encoding. Birden fazla yolu var, yollardan birisi burada detayli anlatiliyor.

    11 Haziran 2015 Perşembe 09:18
  • Yeni baslamissin gibi bir his uyandi icimde. Form ve PictureBox System.Windows.Forms namespace'te. Sen ASP.Net kullaniyorsun diye fark etmez, ben ornegi windows forms ile verdim o kadar. ASP.Net Image ya da normal Html img ile yapman gereken temelde base64 encoding. Birden fazla yolu var, yollardan birisi burada detayli anlatiliyor.

    heh saolun hocam bende bunu arıyordum, aslında sorunu querystring ile resmin idsini ResimDetay.ashx olan sayfaya gönderip imageurl yede Resimdetay.ashx?id verip yapıyordum da bana gereksiz gelmişti olduğu yerde okuması lazım diye bu işimi gördü teşekkürler.

    <asp:Image ImageUrl='<%# "data:image/jpg;base64," + Convert.ToBase64String((byte[])Eval("IMG_DATA")) %>' />  

    • Yanıt Olarak İşaretleyen ByAvora 11 Haziran 2015 Perşembe 12:04
    11 Haziran 2015 Perşembe 12:04
  • Şimdi kafama başka bi soru takıldı, hangi yöntem daha sağlıklı arka planda çalışan .ashx olan mı yoksa sayfada çalışan mı ?
    11 Haziran 2015 Perşembe 12:15