İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Sinema Dizi Akıllı Ev Motosiklet Mikromobilite Kripto Para Sağlık Teknolojileri Son dakika Yazarlar
Mustafa Kemal Atatürk

Cumhuriyetimizin kurucusu Gazi Mustafa Kemal Atatürk'ü vefatının 88. yılında saygı ve özlemle anıyoruz.Gazi Mustafa Kemal Atatürk'ü saygı ve özlemle anıyoruz.Atatürk'ü saygı ve özlemle anıyoruz.

  1. Ana sayfa
  2. SDN Forum
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

C# resim okuma hatası

Konu bilgisi

7cevap
2.710görüntüleme
07.05.2013açıldı
11.05.2013son cevap

#1
Kodlarım aşağıdaki gibi,sql veritabanındaki image alanını okuyup mysql'e kaydetmek istiyorum ama resim alanını path'e atarken hata veriyor.Yardımlarınızı bekliyorum.

SqlConnection con = new SqlConnection("Data Source=OKAN;Initial Catalog=deneme;Integrated Security=True;Pooling=False");
            con.Open();
            //bu sorgu başka bir işlem için kullanılıyor.
            SqlCommand cmd = new SqlCommand("select * from tablo1", con);
            SqlDataReader dr = cmd.ExecuteReader();
                 //2. sorgu başlıyor
                SqlCommand srg = new SqlCommand("select * from tablo2",con);
                con.Open();
                SqlDataReader dr1 = srg.ExecuteReader();
               /* attaki satırda hata veriyor. "Hiçbir veri yokken okuma girişimi başarısız" diye ancak resim alanında veri var.
                resimPath = dr1["resim"].ToString();
//resim okuma
FileStream fs = new FileStream(resimPath, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] resim = br.ReadBytes((int)fs.Length);
                br.Close();
                fs.Close();
                dr1.Close();
MySqlConnectionStringBuilder bag = new MySqlConnectionStringBuilder();
                bag.Server = "localhost";
                bag.UserID = "root";
                bag.Password = "";
                bag.Database = "db";
                MySqlConnection mysql_baglanti = new MySqlConnection(bag.ToString());
                mysql_baglanti.Open();
                MySqlCommand mysql_sorgu1 = new MySqlCommand("insert into product (image) values (@image)", mysql_baglanti);
                mysql_sorgu1.Parameters.AddWithValue("@image", resimPath);
                MySqlDataReader dr_mysql = mysql_sorgu1.ExecuteReader();



Cevaplar
#2
DataReader'dan veri okumayacan önce .Read() metodunun çağırmalısın. Bu metot sana bool değer döndürür. True ise okunacak kayıt var, okuyabilirsin demektir. Tek bir kere .Read() metodunu çağırırsan bir satır okursun. DataReader kullanımını araştırman lazım. Kolay gelsin
okantastan Konuyu açan
#3
Read komutunu biliyorum ama read yaptığım zamanda aynı hatayı veriyor aynı satırda,ben resim okuma satırında mı sorun var diye düşünüyorum,doğru mu peki filestream kodları?
#4
Her ne olursa olsun veri okuyabilmen için read metodunu çağırman lazım. Sorunla ilgili olarak hata mesajını ve hangi satırda hatayı verdiğini yazarsan bir fikir sahibi olabiliriz
okantastan Konuyu açan
#5
Şuan kullanıyorum read metodunu,kodlarda da yazmıştım resimPath = dr1["resim"].ToString(); satırında hata veriyor "Hiçbir veri yokken okuma girişimi başarısız" hatası veriyor.
#6
Pardon, dikkat etmemişim yukarıdaki yazına. Burda soruna yönelik, debug işlemiyle durumu incelemek daha hızlı sonuca götürecektir. Neyse şöyle yapmanı öneririm. Burda peşpeşe iki tane datareader oluşturduğundan bağlantıları vs. karışıyor olabilir. Bu yüzden ilk dr'ni oluşturduktan sonra DataTable tanımlayıp onun .Load metodunu çağırıp parametreyi dr'ni vererek ordaki bilgileri datatableye atmasını sağla. Sonra dr'ni kapa (dr.Close();) ve dr1'i okutmaya başla. Bunu da datatable'ye atabilirsin istersen şuan ki gibi ama en başara .Read diyerek veriyi çekebilirsin. Artık durumuna göre uygun olanını yaparsın
okantastan Konuyu açan
#7
Sorunu çözdüm teşekkür ederim datareader ile ilgili değilmiş,resim okuma kodlarını yanlış yazmışım.Ama gerçekten haklısın connection,command,datareader bunları her işlemde karıştırmamak için açıp kapatmak lazım.
okantastan Konuyu açan
#8
Belki birinin işine yarar.Ben veritabanında image veri tipindeki bilgiyi okuyup bu alandaki resmi almak istiyordum.

byte[] data = dr["resim"] as byte[];
                    using (FileStream fs = new FileStream(@"C:\users\desktop" + resimadi.ToString() + ".jpg", FileMode.CreateNew))
                    {
                        fs.Write(data, 0, data.Length);
                    }

Bu şekilde resim alanındaki resmi masaüstüne alabiliyorum.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.

Reklam