• 17-12-2009, 17:26:04
    #1
    Yaptığım işlemleri yazıyorum. Aldığım hata

    Hiç veri yokken okuma girişimi geçersiz. 
    Açıklama: Geçerli web isteği yürütülürken işlenmemiş özel durum oluştu. Lütfen hata ve kod içinde kaynaklandığı yer hakkında daha fazla bilgi almak için yığın izlemesini gözden geçirin. 
    
    Özel Durum Ayrıntıları: System.InvalidOperationException: Hiç veri yokken okuma girişimi geçersiz.
    
    Kaynak Hatası: 
    
    
    Satır 28:             SqlDataReader rd = com.ExecuteReader();
    Satır 29:             rd.Read();
    Satır 30:             filmadi.Text = rd["FilmAdi"].ToString();
    Satır 31:             con.Close();
    Satır 32:         }

    ana sayfa
            Session["arama"] = TextBox1.Text;
                Response.Redirect("arama.aspx");
    arama.aspx
    SqlConnection con = new SqlConnection(
             ConfigurationManager.ConnectionStrings["DvdShopCenter"].ConnectionString);
                SqlCommand com = new SqlCommand(
                     "arama", con);
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.Parameters.AddWithValue("@arama", Session["arama"]);
                con.Open();
                SqlDataReader rd = com.ExecuteReader();
                rd.Read();
                filmadi.Text = rd["FilmAdi"].ToString();
                con.Close();
    prosedürüm
    ALTER proc Arama
    @arama nvarchar
    as
    	select FilmID,FilmAdi
    	from Filmler
    	where FilmAdi like '%@arama%'
    nerede hata yapıyorum acaba yardım edebilirmisiniz ?

    Birde elinde radiobuttonList ile ilgili örnek olan varmı? burdan aldığım bilgiyi filme puan olarak ekleteceğim
  • 17-12-2009, 17:50:17
    #2
    Session["arama"] = TextBox1.Text;
    Response.Redirect("arama.aspx");

    sessionların da sorun vardır. hem bu asp.net i aşırı kasar. ram sorunu ve performans etkilemesinde gerkesiz bir tanım.

    Response.Redirect(string.Format("arama.aspx?q={0}" ,TextBox1.Text.Trim());

    bunla değiştir.

    arama.aspx de de:

    if(!string.IsNullOrEmpth(Request.QueryString["q"]))
    {

    SqlConnection con = new SqlConnection(
    ConfigurationManager.ConnectionStrings["DvdShopCenter"].ConnectionString);
    SqlCommand com = new SqlCommand(
    "arama", con);
    com.CommandType = System.Data.CommandType.StoredProcedure;
    com.Parameters.AddWithValue("@arama", Request.QueryString["q"]);
    con.Open();
    SqlDataReader rd = com.ExecuteReader();
    rd.Read();
    filmadi.Text = rd["FilmAdi"].ToString();
    con.Close();
    }
    else
    {
    filmadi.Text="Lütfen Aramak istediğiniz kelimeyi belirtin!";
    }


    bu eklediğim kodlar q ile gelen aranacak kelimeyi alır kontrol eder boş mu değilmi diye.
    Eğer boşsa uyarı verir. Boşuna hata almazsın

    DataReader ın satır sayısını da kontrol ettiripi veri var mı yok mu kontrol ettirirsin.

    birde oluşturduğun nesneleri dispose la. yoksa performans sorunu oluşacaktır.
    rd.Dispose();
    com.Dispose();
    con.Dispose();
    gibi yada
    using(){} içine al işi bitince otomatik bellekten atılsın. bu en iyisidir. çünkü hata dahi olsa işlemleri kapatır bellekten siler.

    Kolay gelsin.
  • 17-12-2009, 17:56:20
    #3
    Teşekkür ederim hocam. Hocamız url ile alırsan $# gibi aramalarda hata alırsını dedi diye ben session ile deniyordum
  • 17-12-2009, 19:31:52
    #4
    Parameters olarak atayacagıon için herhangi bir sıkıntı olmaz.
  • 17-12-2009, 19:48:42
    #5
    okokok adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim hocam. Hocamız url ile alırsan $# gibi aramalarda hata alırsını dedi diye ben session ile deniyordum
    o tür karakterler asp.net te link için önemli mesela # sayfa içi linklendirmede önemlidir ama database de kullanmamalısın bu tür karakterleri.
    $ ise o kadar önemli değil. önemli olan & dır bu işi karıştırır bu tür aramalarda.
  • 25-12-2009, 23:27:29
    #6
    • global.asax içerisinde tanımlı bir session
    • aranacak kelimenin htmli
    • içinde aranacak metnin htmli
    • arama.aspx sayfasının load kısmında session değerinin null olmadığını kontrol eden bir else-if
    • arama.aspx sayfasında bulunan bir datagrid
    • datagride ait bir sql data source ( boş session için gridi doldurması istenen bir sorgu )
    • page_load içerisinde oluşturulan bir sql select sorgusu
    +
    • update panel

    bunları birleştirdiğinde session üzerinden doğru aramalar yapabilirsin. ki ben yaptım.
    • neden html ? hostingimdeki türkçe karakterlerin değişik saklanması, ş -> s olarak saklıyor. ha html olmadanda olur fakat web üzerinde gösterilecek bir metni html saklamak bence çok kötü bir yöntem değil.
    • update paneli tetiklediğinde bir sleep atman ve UpdatePanelProgress ile kullanıcıya aramanın yapıldığını hissettirmen ve spam yapmasını engellemen mümkün.
    • neden page load? çünkü page load update panel tetiklendiğinde ilk çalışan kod bloğu.

    yaptığım ama dizaynda ufak tefek hatalar olan site bu siteyide bitircem inşallah kullanıcı paneli kaldı bir tek.

    k.gelsin