Repeater Yenileme Sorunu

onepage (1) 10 yıl önce sordu

Merhaba,

Repeater ItemTemplate içerisinde yazı vs birde silme linki var id ile kendi sayfasına yollayıp Request.QueryString ile alıyorum.

Kodlar vs çalışıyor ama Repeater da silmeye tıkladığımda öyle kalıyor F5 çekince gidiyor veri + databasedende gidiyor.

 

static string yol = ConfigurationManager.ConnectionStrings["cs"].ConnectionString;
    SqlConnection baglanti = new SqlConnection();
    SqlCommand sorgu = new SqlCommand();
    SqlDataReader oku;
    protected void Page_Load(object sender, EventArgs e)
    {
        baglanti = new SqlConnection(yol);
        sorgu.Connection = baglanti;
         int id=0; 
        baglanti.Open();
        if(!string.IsNullOrWhiteSpace(Request.QueryString["id"]))
        {
            id=Convert.ToInt32(Request.QueryString["id"]);
            sorgu.CommandText = "delete from blog where id="+id;
            sorgu.ExecuteNonQuery();
           
        } 
        else
        {
            sorgu.CommandText = "select * from blog";
            oku = sorgu.ExecuteReader();
            haber.DataSource = oku;
            haber.DataBind();
           oku.Close();
        } 
        baglanti.Close(); 
    }

 

Toplam 1 cevap


alattin (17125) 10 yıl önce cevapladı

Kodunuzda bazı yapısal hatalar vardı. Bunları yeniden yazdım.

Farklı görevlere sahip parçaları ayrı metotlar halinde yazın. Hem kodunuzun okunurluğu hem de yönetilebilirliği, tekrar kullanılabilirliği artacaktır.

SQL sorgularını oluştururken string birleştirme kullanmayın. Bu kodunuzu SQL injection saldırılarına açık hale getirir ve hoş olmayan sonuçlar ortaya çıkar.

static string yol = ConfigurationManager.ConnectionStrings["cs"].ConnectionString;

        SqlConnection baglanti;
        SqlCommand sorgu = new SqlCommand();
        SqlDataReader oku;
        protected void Page_Load(object sender, EventArgs e)
        {
            int id = 0;
            Int32.TryParse(Request.QueryString["id"], out id); // tryparse yaparsanız int haricinde gönderilen değerlerde sorun yaşamazsınız.
            //Page.IsPostBack değilse, yani sayfa sunucuya tekrardan post edilmiyorsa sil

            if (!Page.IsPostBack)
            {
                if (id != 0)
                    Sil(id); // Id boş degilse sil.
                HaberleriGetir(); //Haberleri getir.
            }
           
        }
        void Sil(int id)
        {
            baglanti = new SqlConnection(yol);
            sorgu.Connection = baglanti;
            sorgu.CommandText = "delete from blog where id=@pID"; // Parametre tanımlama. Asla string birleştirme yapmayın.
            sorgu.Parameters.AddWithValue("@pID", id); // parametreye değer atama
            baglanti.Open();
            sorgu.ExecuteNonQuery();
            baglanti.Close();
        }
        void HaberleriGetir()
        {
            baglanti = new SqlConnection(yol);
            sorgu.CommandText = "select * from blog";
            sorgu.Connection = baglanti;
            baglanti.Open();
            oku = sorgu.ExecuteReader();
            haber.DataSource = oku;
            haber.DataBind();
            oku.Close();
            baglanti.Close();

        }