Veritabanı yardımıyla picturebox da resim göstermek

Bu yazımda veritabanı, combobox, picturebox kontrollerini bir arada kullanarak basit bir uygulama yapalım. İlk olarak veritabanın da tblResim adında bir tablo oluşturalım. Tabloda id(int), resim için isim alanı(ad nvarchar(50)) ve resim uzantı adı(resimAdi nvarchar(50)) için kolonları oluşturmanız yeterli. Veritabanı kısımını bitirdikten sonra arayüz tarafına geçebiliriz.

Arayüz tarafına geçmeden önce örneğimizde hangi konularda pratik yapacağımızı yazayım;

Veritabanı ile resim ilişkisi
Seçili dosyayı farklı bir konuma kopyalama
Veritabanına resim adı ile kayıt yapmak
Veritabanından çekilen bilgilerle combobox doldurma
openFileDialog kontrolü ile resim dosyası işlemleri
Veritabanı aracılığı ile formda resim gösterme

Senaryomuz şu şekilde; ilk olarak formu doldurup(sadece bir isim girip) herhangi bir yerden o isim için resim seçip yükledikten sonra formu kayıt ediyoruz. Bu kayıt esnasında resim programın çalıştığı dizine seçtiğimiz resmin kopyasını kopyalayarak veritabanına sadece resmin uzantılı adını kayıt etmiş oluyoruz. Kayıt işleminden sonra sağ tarafta kalan comboboz yardımı ile kayıtlı resim isimlerini çekip, combobox seçili olan isime veritabanından karşılık gelen resimi program dizinine kopyaladığımız yerden gösteriyoruz.

combobox-picturebox

Senarya az çok oturduysa resimdeki gibi bir form ekranı tasarlayıp kod tarafına geçebiliriz. Kod içinde gerekli açıklamalar mevcuttur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
        private void Form1_Load(object sender, EventArgs e)
        {
            comboboxDoldur();
        }

        private void comboboxDoldur()
        {
            SqlCommand cmdDoldur = new SqlCommand("Select adi from tblResim", sql);
            sql.Open();
            SqlDataReader rdr = cmdDoldur.ExecuteReader();

            while (rdr.Read())
            {
                comboBox1.Items.Add(rdr["adi"]);
            }
            sql.Close();
        }

       

        private void btnKaydet_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = sql;
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = "insert into tblResim (adi,resimAdi) values (@ad, @resim)";
            cmd.Parameters.AddWithValue("@ad", textBox1.Text);
            cmd.Parameters.AddWithValue("@resim", resimuzantiliadi);


            sql.Open();

            int etkilenen = cmd.ExecuteNonQuery();

            sql.Close();

            if (etkilenen > 0)
            {
                MessageBox.Show("Kayıt edildi...");
                comboboxDoldur();
            }
            else
            {
                MessageBox.Show("Kayıt edilmedi !!!");
            }
        }
        SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            SqlCommand cmd = new SqlCommand("Select resimAdi from tblResim where adi='" + comboBox1.SelectedItem + "'", sql);
            sql.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
           
            while (rdr.Read())
            {
                pictureBox1.Image = Image.FromFile("" + rdr["resimAdi"].ToString());

                pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            }
            sql.Close();

        }
        string dosyaYolu;
        string resimuzantiliadi;
        private void btnYukle_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            resimuzantiliadi = openFileDialog1.SafeFileName;
            dosyaYolu = Path.GetFileName(openFileDialog1.FileName);

            lblResimAdi.Text = dosyaYolu;

            if (File.Exists("" + dosyaYolu)) // "" tırnak yapılmasının nedeni kopyalanacak dosyayı program exe dosyasının bulunduğu konumda dosyanın var olup olmadığını kontrol etmek için.
            {
                MessageBox.Show("Dosya zaten mevcut");
            }
            else
            {
                File.Copy(openFileDialog1.FileName, "" + dosyaYolu); // "" tırnak yapılmasının nedeni kopyalanacak dosyayı program exe dosyasının bulunduğu konuma kopyalamak için.  

                MessageBox.Show("Dosya kopyalandı");

            }    
        }

“Veritabanı yardımıyla picturebox da resim göstermek” için 6 cevap

  1. Merhaba hocam.
    Benim şöyle bir sıkıntım var: Sql Server’a kaydettiğim imageyi dataGridview ve pictureBox’ta gösteremiyorum. Yapmak istediğim şey ise eklediğim imageyi dataGridview de gösterip, çift tıklanılan satırdaki görüntüyü formumda ki pictureBox ta göstermek.

    Gözat butonunun kodları:

    try
    {
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.Filter = “JPG Files (*.jpg)|*.jpg”;
    dlg.Title = “Select Employee Picture”;
    if (dlg.ShowDialog() == DialogResult.OK)
    {
    imgLoc = dlg.FileName.ToString();
    pictureBox1.ImageLocation = imgLoc;
    }

    }
    catch (Exception ex)
    {

    MessageBox.Show(ex.Message);
    }

    Kaydet butonunun kodları:

    try
    {
    byte[] img = null;
    FileStream fs = new FileStream(imgLoc, FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs);
    img = br.ReadBytes((int)fs.Length);
    string sql =”insert into Poliklinikler(PolAdi,PolBilgi,PolImage) values(‘”+textBox1.Text+”‘,'”+textBox2.Text+”‘,'”+@img+”‘)”;
    if(conn.State != ConnectionState.Open)
    conn.Open();
    command = new SqlCommand (sql,conn);
    command.Parameters.Add(new SqlParameter(“@img”, img));
    int x = command.ExecuteNonQuery();
    conn.Close();
    MessageBox.Show(x.ToString() + ” kaydedildi”);

    }
    catch (Exception ex)
    {
    conn.Close();
    MessageBox.Show(ex.Message);
    }

    Yardımlarınızı bekliyorum. Şimdiden teşekkürler..

  2. “image isimlerini datagridview de listeleyip tıklanıldığında image ı picturebox da gösterebilirsin.” hocam bende tam böyle bir şey yapmak istiyordum zaten.:) de nasıl yapacam dünya kadar yöntem denedim yapamadım. metot yoluyla yapıyorum tüm veritabanı işlemlerimi bu arada. belki metot yoluyla olmuyordur

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir