C# resim okuma hatası

Bu konuyu okuyanlar

okantastan

Öğrenci
Katılım
4 Mayıs 2013
Mesajlar
31
Reaksiyon puanı
0
Puanları
6
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.
Kod:
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();
 

mjsamet

Asistan
Katılım
22 Aralık 2009
Mesajlar
149
Reaksiyon puanı
1
Puanları
0
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

Öğrenci
Katılım
4 Mayıs 2013
Mesajlar
31
Reaksiyon puanı
0
Puanları
6
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ı?
 

mjsamet

Asistan
Katılım
22 Aralık 2009
Mesajlar
149
Reaksiyon puanı
1
Puanları
0
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

Öğrenci
Katılım
4 Mayıs 2013
Mesajlar
31
Reaksiyon puanı
0
Puanları
6
Ş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.
 

mjsamet

Asistan
Katılım
22 Aralık 2009
Mesajlar
149
Reaksiyon puanı
1
Puanları
0
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

Öğrenci
Katılım
4 Mayıs 2013
Mesajlar
31
Reaksiyon puanı
0
Puanları
6
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

Öğrenci
Katılım
4 Mayıs 2013
Mesajlar
31
Reaksiyon puanı
0
Puanları
6
Belki birinin işine yarar.Ben veritabanında image veri tipindeki bilgiyi okuyup bu alandaki resmi almak istiyordum.
Kod:
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.
 
Üst