Sql Veritabanına Resim Ekleme
Merhaba arkadaşlar. Bu makalemizde oluşturmuş olduğumuz Sql veritabanına resim eklemeyi göreceğiz. Formumuza 1 adet pictureBox, textBox, label, openFileDialog ve 2 adet Button ekleyin. Sql veritabanınızı Şekil 1 deki gibi, Katolog tablosunu da Şekil 2 deki gibi oluşturun.
Kısaca yapacağımız işlemleri anlatırsak; openFileDialog nesnesiyle resim dosyalarının açıp pictureBox ta göstereceğiz. Daha sonra FileStream metodu ile (dosyanın tam adresi,dosya modu,dosyanın açılış şekli) resim dosyasını okuma modunda açacağız. BinaryReader ve ReadBytes metodları ile sırasıyla veri akışı ve resim dosyasının byte değerini alıyoruz. Son olarakta Sql veritabanına bağlanarak, insert into metoduyla resim dosyalarımızı Sql veritabanımıza kaydediyoruz. (Şekil 5) Açıklamalar kod kısmında verilmiştir.
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string resimPath;
private void Form1_Load(object sender, EventArgs e)
{
this.Text = "Sql Veritabanına Resim Ekleme";
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}
private void btnResimAc_Click(object sender, EventArgs e)
{
//Resim dosyalarımızı openFileDialog nesnesi ile açacağız.
openFileDialog1.Title = "Resim Aç";
openFileDialog1.Filter = "Jpeg Dosyası (*.jpg)|*.jpg|Gif Dosyası (*.gif)|*.gif|Png Dosyası (*.png)|*.png|Tif Dosyası (*.tif)|*.tif";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
label1.Text = openFileDialog1.FileName.ToString();
resimPath = openFileDialog1.FileName.ToString();
}
}
private void btnKaydet_Click(object sender, EventArgs e)
{
//Resimimizi FileStream metoduyla okuma modunda açıyoruz.
FileStream fs=new FileStream(resimPath,FileMode.Open,FileAccess.Read);
//BinaryReader ile byte dizisi ile FileStream arasında veri akışı sağlanıyor.
BinaryReader br = new BinaryReader(fs);
/*ReadBytes ile FileStreamde belirtilen resim dosyasındaki byte lar
byte dizisine aktarılıyor.
*/
byte[] resim = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//Sql Veritabanı ve Kayıt işlemleri
SqlConnection baglan = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\bilgi.mdf;Integrated Security=True;User Instance=True");
SqlCommand komut = new SqlCommand("insert into Katalog(Aciklama,Resim) Values (@yorum,@image) ",baglan);
/*yorum adlı parametre oluşturuyoruz. Char tipinde, 200 karakter uzunluğunda
ve değerinide TextBox tan alacak.
*/
komut.Parameters.Add("@yorum",SqlDbType.Char,200).Value=textBox1.Text;
komut.Parameters.Add("@image", SqlDbType.Image, resim.Length).Value = resim;
try
{
baglan.Open();
komut.ExecuteNonQuery();
MessageBox.Show(label1.Text + " veritabanına kaydedildi.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
baglan.Close();
}
}
}
}
Bir makalenin daha sonuna geldik. Bir sonraki makalede görüşmek dileğiyle. Hoşçakalın. Bahadır ŞAHİN