C# Resim Dosyasını Veritabanına Yazmak Okumak‏

System.IO,System.Data.SqlClient kütüphanelerini ekledikten sonra;

1. yöntem veritabanına yazmak için

byte[] data = File.ReadAllBytes(dosya_yolu);
 SqlCommand cmd = new SqlCommand("insert into tablo_adi (binary_sutun_adi) values (@binary)", conn);
 cmd.Parameters.AddWithValue("binary", data);
 conn.Open();
 cmd.ExecuteNonQuery();
 conn.Close();

2.yöntem veritabanına yazmak için
Kod:

using (FileStream fs = new FileStream(dosya_yolu, FileMode.Open))
 {
 BinaryReader rd = new BinaryReader(fs);
 byte[] data = rd.ReadBytes(Convert.ToInt32(fs.Length));
 SqlCommand cmd = new SqlCommand("insert into tablo_adi (binary_sutun_adi) values (@binary)", conn);
 cmd.Parameters.AddWithValue("binary", data);
 conn.Open();
 cmd.ExecuteNonQuery();
 conn.Close();
 }

Veritabanından okuyup dosya olarak kaydetmek için 1. yöntem.

using (SqlDataReader rd = cmd.ExecuteReader())
 {
 if (rd.Read())
 {
 byte[] data = rd[binary_sutun_adi] as byte[];
 File.WriteAllBytes(hedef_dosya_yolu,data);
 }
 }

Veritabanından okuyup dosya olarak kaydetmek için 2. yöntem.

using (SqlDataReader rd = cmd.ExecuteReader())
 {
 if (rd.Read())
 {
 byte[] data = rd[binary_sutun_adi] as byte[];
 using (FileStream fs = new FileStream(hedef_dosya_yolu, FileMode.CreateNew))
 {
 fs.Write(data, 0, data.Length);
 }
 }
 }

Diske kaydetmeden hafızaya yükleyip oradan işlem yapmak için.

using (SqlDataReader rd = cmd.ExecuteReader())
 {
 if (rd.Read())
 {
 byte[] data = rd[binary_sutun_adi] as byte[];
 using (MemoryStream ms = new MemoryStream())
 {
 ms.Write(data, 0, data.Length);
 Image img = Image.FromStream(ms);
 pictureBox1.Image = img; //Örnek olarak hafızada oluşturduğun resmi picturebox'a atayabilirsin.
 }
 }
 }

C# Resim Dosyasını Veritabanına Yazmak Okumak‏” için 8 yorum

  • 07 Mayıs 2013 tarihinde, saat 15:30
    Permalink

    Hocam teşekkür ederim kodlar işime yaradı ama şöyle birşey var dosyayı kaydetmek istediğimde hedef_dosya_yoluna dosya yolunu yazdığım zaman dosyaya erişim reddedildi diye hata veriyor niye yapıyor olabilir?

    Yanıtla
  • 07 Mayıs 2013 tarihinde, saat 17:01
    Permalink

    Merhabalar,

    Dosya kaydederken, dosya ismi ve uzantısı belirtmelisin.

    Örneğin:

    using (SqlDataReader rd = cmd.ExecuteReader())
    {
    if (rd.Read())
    {
    byte[] data = rd[“veri”] as byte[];
    using (FileStream fs = new FileStream(“c:\\1\\abc.jpg”, FileMode.CreateNew))
    {
    fs.Write(data, 0, data.Length);
    }
    }
    }

    Yanıtla
  • 07 Mayıs 2013 tarihinde, saat 17:32
    Permalink

    Ben veritabanında image alanında gömülü olan resmi almak istiyorum hocam yani o resmi alıp bir klasöre atcam yani o resmi dosya olarak kaydetcem yani.

    Yanıtla
  • 07 Mayıs 2013 tarihinde, saat 17:42
    Permalink

    Tamamdır ben createnew yerine open yazmıştım onu unutmuşum değiştirdim şimdi oldu çok teşekkür ederim.
    Bir sorum daha olacak şimdi bu img adındaki from stream’i bi alıp başka tabloya kaydedebilirmiyim?

    Yanıtla
  • 07 Mayıs 2013 tarihinde, saat 18:46
    Permalink

    Hocam çok soru sordum ama mysql’e binary olarak atsam direk php resimi görür mü?

    Yanıtla
  • 05 Ağustos 2013 tarihinde, saat 03:41
    Permalink

    Diske kaydetmeden hafızaya yükleyip oradan işlem yapmak için. Olan Kodlarda
    Image img = Image.FromStream(ms);
    Satırında “parameter is not valid” Hatası Veriyor hocam

    Yanıtla
  • 05 Ağustos 2013 tarihinde, saat 17:01
    Permalink

    Bahsettiğimiz uygulama ile ilgili küçük bir örnek, uygulayınız..

    baglanti = new SqlConnection(ini.IniReadValue(“ConnectionString”, “ConStr”));
    baglanti.Open();

    string sql = “select * from resim where id=8”;
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = sql;
    cmd.Connection = baglanti;

    using (SqlDataReader rd = cmd.ExecuteReader())
    {
    if (rd.Read())
    {
    byte[] data = rd[“veri”] as byte[];
    using (MemoryStream ms = new MemoryStream())
    {
    ms.Write(data, 0, data.Length);
    Image img = Image.FromStream(ms);
    pictureBox1.Image = img;
    }
    }
    }

    Yanıtla

Bir Cevap Yazın

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