Repeater Yenileme Sorunu

0

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(); 
    }

 

onepage onepage (1)
9 yıl önce sordu

    Toplam 1 Cevap


    0

    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();
    
            }

     

    alattin alattin (16984)
    9 yıl önce cevaplandı

      üyelik gerektirir

      Cevap yazabilmek için üye girişi yapmalısınız.

      Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
      uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol