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
7 comments:
Kolay gelsin bahadır bey,
resmi ekledik güzel hata almadık ta
şimdi biz bu picture da bu resmi nası görüntüleyeceğiz ?
Select Komudu ile görüntülüceksiniz. Şimdi soru sırası bende. biliorm böyle resim kaydetmeyi fakat ben adres yolu kaydeterek dosyalara eklemeyi istiyorum. bir makalede anlatırsanız seviniriz..
hocam Allah rızası için bir yardım lütfen dediklerinizi aynen uyguluyorum resimler istediğim gibi geliyor yalnız 10 dakika sonra sanki bişe olmuş gibi bozuluyor nedeni nedir sizce?
Eklenen resmi ara butonu ile nasıl gösterebiliriz?
Bahadır bey iyi günler. Bir otomasyon yapma aşamasındayım. Resmi ekliyorum ama her bir veri tabanındaki veriye eklemekte problem yaşıyorum. Yardım edebilmeniz mümkün mü acaba?
Merhaba hocam ben koşullu ekliyorum yani insert intonun sonunda where var ve bütün herşeyi eksiksiz yazıyorum ama wherede hata alıyorum yardım ederseniz sevinirim mehmet.can.korkmaz.2000.342@gmail.com yardım ederseniz sevinirim tekrardan
Her yerde olan aynı makale.. insan kendinden bir şeyler katar yada en azından sorulara cevap verir.. Eline sağlık kopyala yapıştır'ı iyi kullanmışsın..
Yorum Gönder