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.
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.
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.
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.
Ş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.
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.