Bu yazımızda SQL Resim Eklemek konusuna değineceğiz. Daha önceki yazılarımızda SQL Server‘ a text, sayı veya tarih gibi çeşitli türlerde değişkenlerimizi yazmayı ve okumayı öğrenmiştik. Bu yazımızda C#’ ta sql server’a resim nasıl insert edilir ve daha sonra nasıl bu resmi picturebox nesnemizde gösterebiliriz bunu öğreneceğiz. İlk önce aşağıdaki gibi bir arayüz C#’ ta oluşturun.

SQL Resim Ekleme (image insert)

SQL Resim Ekleme (image insert)

Daha önceki openFileDialog ile ilgili yazımızda picturebox’ a nasıl resim eklendiğini öğrenmiştik. Bu uygulamamızda da aynı şekilde ilk önce picturebox’ a resmimizi ekleyeceğiz. Sonra resmimize bi isim vererek SQL INSERT butonuna bastığımızda oluşturduğumuz database’ a resmimizi eklemiş olacağız. Ardından, SQL READ butonu ile textbox’a yazdığımız isimdeki resmi okuyup tekrardan picturebox’ ta göstereceğiz.

Database’ de image dosyası için sutun oluştuturken data type‘ ı image olarak seçmeyi unutmayın.

SQL Database Resim Değişkeni Tanımlama

SQL Database Resim Değişkeni Tanımlama

Aşağıdaki kodu inceleyerek kendi programınıza entegre edin.

// www.kaizen40.com

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;

using System.Windows.Forms;

namespace sqlimageinsert
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void PicBoxEklenen_Click(object sender, EventArgs e)
        {
            Stream myStream = null;

            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);    // masaüstünü göstermesi için
            openFileDialog1.Filter = "JPEG (*.jpg; *jpeg; *jpe)|*.jpg; *jpeg; *jpe|All files (*.*)|*.*";        // dosya filtrelemesi
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            foreach (string s in openFileDialog1.FileNames)     // multi select özelliği için kullanılabilir
                            {
                                PicBoxEklenen.ImageLocation = s;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: Dosya okunamadı!" + ex.Message);
                }
            }
        }

        private void BtnSqlinsert_Click(object sender, EventArgs e)
        {
            if (PicBoxEklenen.ImageLocation.ToString() != "")       // dosya var mı
            {
                byte[] ImageByteArray = File.ReadAllBytes(PicBoxEklenen.ImageLocation.ToString());

                using (SqlConnection connection = new SqlConnection("connection stringinizi buraya yazın"))
                {
                    using (SqlCommand command = new SqlCommand())
                    {
                        command.Connection = connection;
                        command.CommandText = "INSERT INTO dbo.test (title, imagefile) VALUES (@title, @imagefile)";
                        command.Parameters.AddWithValue("@title", TxtTitle.Text);
                        command.Parameters.AddWithValue("@imagefile", ImageByteArray);

                        try
                        {
                            connection.Open();
                            command.ExecuteNonQuery();

                            MessageBox.Show("Başarılı!");
                        }
                        catch (SqlException se)
                        {
                            MessageBox.Show(se.ToString());
                        }
                        finally
                        {
                            connection.Close();
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Resim seç!");
            }
        }

        private void BtnSqlRead_Click(object sender, EventArgs e)
        {
            using (SqlConnection connection = new SqlConnection("connection stringinizi buraya yazın"))
            {
                try
                {
                    connection.Open();
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT imagefile FROM dbo.test WHERE title = '" + TxtTitle.Text + "'", connection));

                    DataSet dataSet = new DataSet();
                    dataAdapter.Fill(dataSet);
                    if (dataSet.Tables[0].Rows.Count == 1)
                    {
                        Byte[] data = new Byte[0];
                        data = (Byte[])(dataSet.Tables[0].Rows[0]["imagefile"]);        // tablodaki coloum ismi
                        MemoryStream mem = new MemoryStream(data);
                        PicBoxGosterilen.Image = Image.FromStream(mem);

                        MessageBox.Show("Okuma Başarılı");
                    }
                    else
                    {
                        PicBoxGosterilen.Image = null;
                        MessageBox.Show("Resim Yok!");
                    }                  
                }
                catch(SqlException se)
                {
                    MessageBox.Show(se.ToString());
                }
                finally
                {
                    connection.Close();
                    connection.Dispose();
                }               
            }
        }
    }
}

Programınızı çalıştırıp resminizi yükleyip SQL server’ a gönderdiğinizde aşağıdaki gibi bir sonuç almalısınız.

C# SQL image insert

C# SQL image insert

Eğer SQL Server’ da query yaparsanız resim dosyalarınızın nasıl sonuçlarda gözüktüğünü görürüsünüz.

SQL Database Query

SQL Database Query

Şimdi imagefile olarak adlandırdığımız sütundaki byte olarak yazılan resim dosyamızı okuyup arayüzdeki picturebox’ ta gösermek istediğimizde aşağıdaki gibi bir sonuç aldığınız zaman kodlarınız çalışıyor demektir. SQL Resim Eklemek konusunu bu şekilde tamamlamış olduk. İyi çalışmalar.

C# SQL image read, resim dosyası okuma

C# SQL image read, resim dosyası okuma


1 yorum

mustafa · 10 Kasım 2020 16:09 tarihinde

data = (byte[])(dataShipper.Rows[e.RowIndex][“Picture”]);
MemoryStream ms = new MemoryStream(data); //Argument Exception
pictureBoxShiper.Image = Image.FromStream(ms);

Benimde böyle bir kodum var ama argument exception hatası veriyor,neden kaynaklanabilir,yardımcı olurmusunuz.

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.