En iyi yanıtlayıcılar
Döngü ile fotoğraf silme

Soru
-
merhaba, süresi dolunca silinen bir verim var ve bu verinin fotoğrafını da silmek istiyorum.
DataRow resimismi = vt.GetDataRow("select foto from seriilan where datediff('d', eklemetarih, Date()) > sure+7 order by ilan_id desc"); //süresi dolan ilanın resim ismini getir
şöyle bir yol denedim;
DataRow resimsayisi = vt.GetDataRow("select count(foto) as sayi from seriilan where datediff('d', eklemetarih, Date()) > sure+7"); //süresi dolan ilanların sayısı
for (int i = 0; i < int.Parse(resimsayisi["sayi"].ToString()); i++ ) // süresi dolan verilerin sayısı kadar döngüyü tekrarla
{
if (File.Exists(Server.MapPath("../Upload/serifoto/" + resimismi["foto"]))) //böyle bir resim var mı
{
File.Delete(Server.MapPath("../Upload/serifoto/" + resimismi["foto"])); //bu fotoğrafı sil}
}
datatable komutu ile resim isimlerini diziye atıp dizideki isimleri sildirmeyi denedim ama datatable'daki verileri diziye atamadım.
sorun şu; resim ismini for döngüsünün dışında çekiyorum. mesela 3 tane ilanın süresi doldu ve bunların fotoğrafı silinecek. resim sayısını alıyor for döngüsüne giriyor siliyor. tekrar döndüğünde resmi bulamadı diyor for'dan çıkıyor.
onun yerine, zaten her zaman en son veri gelecek en son veri geldikçe sil dedim. yani döngü silinecek veri sayısı kadar döndüğünde süresi biten bütün ilanlar silinecekti. ama işler öyle gitmedi. işin içinden de çıkamayınca size danışayım dedim.
bende resim ismini for döngüsün içinde çekmeye çalışıyorum. yani for döngüsü her başa sardığında son veriyi çek demek istiyorum ama bu seferde Nesne başvurusu bir nesnenin örneğine ayarlanmadı. hatası veriyor.
Yanıtlar
-
DataRow resimsayisi = vt.GetDataRow("select count(foto) as sayi from seriilan where datediff('d', eklemetarih, Date()) > sure+7"); //süresi dolan ilanların sayısı
DataRow resimismi = vt.GetDataRow("select foto from seriilan where datediff('d', eklemetarih, Date()) > sure+7 order by ilan_id desc"); //süresi dolan ilanın resim ismini getir
Yukarıda ki kodların gerizeye dizin döndürmüyor. vt.GetDataRow geriye dizin döndürse DataRow[] şeklinde yakalaman gerekir. Aşağıda ki örneğe göre kodlarını düzenleyeblirsin.
using (SqlConnection connection = new SqlConnection("conString")) { DataTable dataTable = new DataTable(); SqlCommand command = new SqlCommand("select foto from seriilan where datediff('d', eklemetarih, Date()) > sure+7",connection); SqlDataAdapter sqlAdapter = new SqlDataAdapter(); sqlAdapter.Fill(dataTable); foreach (DataRow item in dataTable.Rows) { if (File.Exists(Server.MapPath("../Upload/serifoto/" + item["foto"]))) //böyle bir resim var mı { File.Delete(Server.MapPath("../Upload/serifoto/" + item["foto"])); //bu fotoğrafı sil } } }
- Yanıt Olarak İşaretleyen KaanOZTRK 5 Ocak 2015 Pazartesi 20:52
Tüm Yanıtlar
-
DataRow resimsayisi = vt.GetDataRow("select count(foto) as sayi from seriilan where datediff('d', eklemetarih, Date()) > sure+7"); //süresi dolan ilanların sayısı
DataRow resimismi = vt.GetDataRow("select foto from seriilan where datediff('d', eklemetarih, Date()) > sure+7 order by ilan_id desc"); //süresi dolan ilanın resim ismini getir
Yukarıda ki kodların gerizeye dizin döndürmüyor. vt.GetDataRow geriye dizin döndürse DataRow[] şeklinde yakalaman gerekir. Aşağıda ki örneğe göre kodlarını düzenleyeblirsin.
using (SqlConnection connection = new SqlConnection("conString")) { DataTable dataTable = new DataTable(); SqlCommand command = new SqlCommand("select foto from seriilan where datediff('d', eklemetarih, Date()) > sure+7",connection); SqlDataAdapter sqlAdapter = new SqlDataAdapter(); sqlAdapter.Fill(dataTable); foreach (DataRow item in dataTable.Rows) { if (File.Exists(Server.MapPath("../Upload/serifoto/" + item["foto"]))) //böyle bir resim var mı { File.Delete(Server.MapPath("../Upload/serifoto/" + item["foto"])); //bu fotoğrafı sil } } }
- Yanıt Olarak İşaretleyen KaanOZTRK 5 Ocak 2015 Pazartesi 20:52
-