none
C# DataGrid'in Son Satırındaki Resmi Kullanmak RRS feed

  • Soru

  • Başlıktan anlamamış olabilirsiniz. Amacımı kafanızı şişirmeden açıklıyorum;

    SQL Server veritabanını kullanarak form üzerinde openFileDialog ile datagrid e resim kayıt yapabiliyorum. Haliyle bu resim veritabanına da kayıt edilmiş oluyor. Benim amacım kaydedilen son fotoğrafı program açıldığında istediğim picturebox'a çağırabilmek. Kodu kullanma amacım ise yaptığım bir yazılımda profil fotoğrafını güncelleyebilmek. 

    Şimdiden teşekkür ediyor, yardımlarınızı bekliyorum.

    Profil resmini güncelle butonunda kullandığım kodlar ; 

     openFileDialog1.Title = "Profil Resmini Seç";
                
                if (openFileDialog1.ShowDialog() == DialogResult.OK) 
                {
                    pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
                    resimpath = openFileDialog1.FileName.ToString();
                    FileStream fs = new FileStream(resimpath, FileMode.Open, FileAccess.Read);
                    BinaryReader br = new BinaryReader(fs);
                    byte[] resim = br.ReadBytes((int)fs.Length);
                    br.Close();
                    fs.Close();
                    SqlConnection bag = new SqlConnection(@"Server = BERK; Database = resim; Trusted_Connection = True; ");
                    SqlCommand kmt = new SqlCommand("insert into resim(resim) values (@image)", bag);
                    kmt.Parameters.Add("@image", SqlDbType.Image, resim.Length).Value = resim;
      
                    try
                    {
    
                        bag.Open();
                        kmt.ExecuteNonQuery();
                        MessageBox.Show("Profil resminiz güncellendi.");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                       
                    }
                    finally
                    {
                        bag.Close();
    
                    }
    
    
    
                }

    21 Nisan 2020 Salı 19:59

Yanıtlar

  • Simdi ben kızdım :) "bu kodlar benim istediğim özelliği sunmadı veya ben bir yerde hata yaptım" ne demek? Bunun kime ne faydası var? Size tamamen calisan bir kod veriliyor ve boyle bir cevap veriyorsunuz. Ne hata verdi de olmadı. Tam tarif ettiginizi yapan kod iste (sadece ufak bir hata yapmisim, order by yerine order yazmisim, by'i siz koymussunuzdur).

    Calisan hali ile (farkeden benim SQLexpress baglantisi ve db adi):

    void Main()
    {
    	MyForm f = new MyForm();
    	f.Show();
    }
    
    public class MyForm : Form
    {
    	private PictureBox pictureBox1 = new PictureBox
    	{
    		Top = 10,
    		Left = 10,
    		Height = 200,
    		Width = 200,
    		SizeMode = PictureBoxSizeMode.StretchImage
    	};
    	public MyForm()
    	{
    		this.Controls.Add(pictureBox1);
    		this.Load += MyForm_Load;
    	}
    	private void MyForm_Load(object sender, EventArgs args)
    	{
    		try
    		{
    			using (SqlConnection bag = new SqlConnection(@"Server=.\SQLExpress;Database=imageDb;Trusted_Connection=yes;"))
    			using (SqlCommand cmd = new SqlCommand("select top(1) resim from resim order by Id desc", bag))
    			{
    				bag.Open();
    				var bytes = (byte[])cmd.ExecuteScalar();
    				bag.Close();
    				using (MemoryStream ms = new MemoryStream(bytes))
    				{
    					pictureBox1.Image = Image.FromStream(ms);
    				}
    			}
    		}
    		catch { }
    	}
    }

    Bu da calisinca görünen:



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.


    23 Nisan 2020 Perşembe 13:35
    Yanıtlayıcı

Tüm Yanıtlar

  • Biraz uzun yoldan yapmissiniz ama asil hata, sadece insert ediyorsunuz. 100 kere güncellense veritabanında 100 yeni resim olacak ve istediğiniz en son ekleneni mi bulmak? Veritabaninizda clustered index yoksa, en son insert edileni bulmanın yolu yok (yanında kullanılabilecek tarih, id vb bir kolon yoksa). Sans eseri bulabilirsiniz. Diyelim ki en azından bir id var (muhtemelen IDENTITY):

    select  top(1) resim 
    from resim
    order by id descending;

     



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.

    21 Nisan 2020 Salı 20:10
    Yanıtlayıcı
  • Biraz uzun yoldan yapmissiniz ama asil hata, sadece insert ediyorsunuz. 100 kere güncellense veritabanında 100 yeni resim olacak ve istediğiniz en son ekleneni mi bulmak? Veritabaninizda clustered index yoksa, en son insert edileni bulmanın yolu yok (yanında kullanılabilecek tarih, id vb bir kolon yoksa). Sans eseri bulabilirsiniz. Diyelim ki en azından bir id var (muhtemelen IDENTITY):

    select  top(1) resim 
    from resim
    order by id descending;

     



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.

    Öncelikle teşekkür ederim. Evet veritabanında bir id kolonu bırakmıştım. Dediğiniz gibi son resmi Profil fotoğrafı olarak kullandığım picturebox'a getirmek istiyorum. Yani kullanıcı bilgisiyarından bir resim seçecek ve o resim profil resmi olarak veritabanına kayıt edilmiş olacak. Ve profil fotoğrafı bir daha değiştirilene kadar en son seçtiği fotoğraf pp olarak kalacak. Profil resmini seçerek veritabanına image olarak kayıt ettirebiliyorum ancak son seçilen fotoğrafı picturebox'a çağıramıyorum. 

    Açıkça söylemek gerekirse yazdığınız koddan bir şey anlamadım. 

    (AMATÖRÜM)

    22 Nisan 2020 Çarşamba 11:55
  • Yazdigim kod basitin de ötesinde aslında. Belki once C#'i, daha sonra SQL'i öğrenip ondan sonra yazmaya baslamalisiniz. Daha basit nasıl anlatayım bilemedim. Form.Load'da yazacaginiz kodu mu bilmiyorsunuz?

    Baslamisken sizin yazdiginiz kodu da düzenleyeyim bari:

    Bu sizin insert kodunuz:

    openFileDialog1.Title = "Profil Resmini Seç";
    
    if (openFileDialog1.ShowDialog() == DialogResult.OK &&
        !string.IsNullOrEmpty(openFileDialog1.FileName))
    {
    	pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
    	byte[] resim = File.ReadAllBytes( openFileDialog1.FileName );
    	
    	using (SqlConnection bag = new SqlConnection(@"Server=.;Database=resim;Trusted_Connection=yes;"))
    	using (SqlCommand kmt = new SqlCommand("insert into resim(resim) values (@image)", bag))
    	{
    		kmt.Parameters.Add("@image", SqlDbType.Image).Value = resim;
    		try
    		{
    			bag.Open();
    			kmt.ExecuteNonQuery();
    			MessageBox.Show("Profil resminiz güncellendi.");
    		}
    		catch (Exception ex)
    		{
    			MessageBox.Show(ex.Message);
    		}
    	}
    }

    Bu da Form.Load:

    private void MyForm_Load(object sender, EventArgs args)
    {
    	try
    	{
    		using (SqlConnection bag = new SqlConnection(@"Server=.;Database=resim;Trusted_Connection=yes;"))
    		using (SqlCommand cmd = new SqlCommand("select top(1) resim from resim order Id desc", bag))
    		{
    			bag.Open();
    			var bytes = (byte[])cmd.ExecuteScalar();
    			bag.Close();
    			using (MemoryStream ms = new MemoryStream(bytes))
    			{
    				pictureBox1.Image = Image.FromStream(ms);
    			}
    		}
    	}
    	catch (Exception ex) { }
    }

    Kizacaksiniz ama veritabanı programlama o kadar da basit bir is degil, C# ve SQL'i öğrenmeden dalmayınız, ya da en azından sadece deneme amaçlı islerde kullaniniz.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.


    22 Nisan 2020 Çarşamba 13:29
    Yanıtlayıcı
  • Yazdigim kod basitin de ötesinde aslında. Belki once C#'i, daha sonra SQL'i öğrenip ondan sonra yazmaya baslamalisiniz. Daha basit nasıl anlatayım bilemedim. Form.Load'da yazacaginiz kodu mu bilmiyorsunuz?

    Baslamisken sizin yazdiginiz kodu da düzenleyeyim bari:

    Bu sizin insert kodunuz:

    openFileDialog1.Title = "Profil Resmini Seç";
    
    if (openFileDialog1.ShowDialog() == DialogResult.OK &&
        !string.IsNullOrEmpty(openFileDialog1.FileName))
    {
    	pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
    	byte[] resim = File.ReadAllBytes( openFileDialog1.FileName );
    	
    	using (SqlConnection bag = new SqlConnection(@"Server=.;Database=resim;Trusted_Connection=yes;"))
    	using (SqlCommand kmt = new SqlCommand("insert into resim(resim) values (@image)", bag))
    	{
    		kmt.Parameters.Add("@image", SqlDbType.Image).Value = resim;
    		try
    		{
    			bag.Open();
    			kmt.ExecuteNonQuery();
    			MessageBox.Show("Profil resminiz güncellendi.");
    		}
    		catch (Exception ex)
    		{
    			MessageBox.Show(ex.Message);
    		}
    	}
    }

    Bu da Form.Load:

    private void MyForm_Load(object sender, EventArgs args)
    {
    	try
    	{
    		using (SqlConnection bag = new SqlConnection(@"Server=.;Database=resim;Trusted_Connection=yes;"))
    		using (SqlCommand cmd = new SqlCommand("select top(1) resim from resim order Id desc", bag))
    		{
    			bag.Open();
    			var bytes = (byte[])cmd.ExecuteScalar();
    			bag.Close();
    			using (MemoryStream ms = new MemoryStream(bytes))
    			{
    				pictureBox1.Image = Image.FromStream(ms);
    			}
    		}
    	}
    	catch (Exception ex) { }
    }

    Kizacaksiniz ama veritabanı programlama o kadar da basit bir is degil, C# ve SQL'i öğrenmeden dalmayınız, ya da en azından sadece deneme amaçlı islerde kullaniniz.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.


    Öncelikle teşekkür ediyorum ama istediğim şeyi henüz başarmış değilim. Kızma konusuna da gelince öyle bir durum söz konusu olmaz :) Yazılımcı değilim ve üzerinde çalıştığım uygulamayı da ticari amaçlı kullanmayacağım. Karantina sürecinde evde sıkılıp hobilerime yönelme fırsatı buldum. O yüzden yaklaşık 20-25 gündür C# ile uğraşıyorum ve bundan keyif alıyorum. Elimden geldiğince de kendimi geliştirmeye çalışıyorum. 

    Tekrardan teşekkür ederim. Ama başta da söylediğim gibi bu kodlar benim istediğim özelliği sunmadı veya ben bir yerde hata yaptım. 

    23 Nisan 2020 Perşembe 10:22
  • Simdi ben kızdım :) "bu kodlar benim istediğim özelliği sunmadı veya ben bir yerde hata yaptım" ne demek? Bunun kime ne faydası var? Size tamamen calisan bir kod veriliyor ve boyle bir cevap veriyorsunuz. Ne hata verdi de olmadı. Tam tarif ettiginizi yapan kod iste (sadece ufak bir hata yapmisim, order by yerine order yazmisim, by'i siz koymussunuzdur).

    Calisan hali ile (farkeden benim SQLexpress baglantisi ve db adi):

    void Main()
    {
    	MyForm f = new MyForm();
    	f.Show();
    }
    
    public class MyForm : Form
    {
    	private PictureBox pictureBox1 = new PictureBox
    	{
    		Top = 10,
    		Left = 10,
    		Height = 200,
    		Width = 200,
    		SizeMode = PictureBoxSizeMode.StretchImage
    	};
    	public MyForm()
    	{
    		this.Controls.Add(pictureBox1);
    		this.Load += MyForm_Load;
    	}
    	private void MyForm_Load(object sender, EventArgs args)
    	{
    		try
    		{
    			using (SqlConnection bag = new SqlConnection(@"Server=.\SQLExpress;Database=imageDb;Trusted_Connection=yes;"))
    			using (SqlCommand cmd = new SqlCommand("select top(1) resim from resim order by Id desc", bag))
    			{
    				bag.Open();
    				var bytes = (byte[])cmd.ExecuteScalar();
    				bag.Close();
    				using (MemoryStream ms = new MemoryStream(bytes))
    				{
    					pictureBox1.Image = Image.FromStream(ms);
    				}
    			}
    		}
    		catch { }
    	}
    }

    Bu da calisinca görünen:



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.


    23 Nisan 2020 Perşembe 13:35
    Yanıtlayıcı