title: Invalid attempt to read when no data is present in dr
body: <p>I am trying to create a login form on my ASP.NET website. Currently, there's some problem. I am trying to incorporate the functionality such that the logged in user has the previlige to view only his profile. The code on the login page is this:</p>
  
  <pre><code>business.clsprofiles obj = new business.clsprofiles();
          Int32 a = obj.logincheck(TextBox3.Text, TextBox4.Text);
          if (a == -1)
          {
              Label1.Text = "Username/Password incorrect";
          }
          else
          {
              Session["cod"]= a;
              Response.Redirect("profile.aspx");
          }
  </code></pre>
  
  <p>After logging in, the user is moved to the page where the person can view his profile once logged in. Session is obtaining the value correctly of the logged in person from the login-page and successfully passing it on to the next page. But here on this profile page an error occurs and I think there is problem somewhere  in the <code>grid_bind()</code> method below</p>
  
  <pre><code>public void grid_bind()
  {
      business.clsprofiles obj = new business.clsprofiles();
      List&lt;business.clsprofilesprp&gt; objprp = new List&lt;business.clsprofilesprp&gt;();
      Int32 z = Convert.ToInt32(Session["cod"]);
      objprp = obj.fnd_profiles(z); //This line of code is passing an integer as required but does not get the desired result from the database
      GridView1.DataSource = objprp;
      GridView1.DataBind();
  }
  </code></pre>
  
  <p>As the error in business logic says, <strong>" invalid attempt to read when no data is present in dr"</strong></p>
  
  <pre><code>public List&lt;clsprofilesprp&gt; fnd_profiles(Int32 id)
          {
              if (con.State == ConnectionState.Closed)
              {
                  con.Open();
              }
              SqlCommand cmd = new SqlCommand("fndpro", con);
              cmd.CommandType = CommandType.StoredProcedure;
              cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
              SqlDataReader dr = cmd.ExecuteReader();
              List&lt;clsprofilesprp&gt; obj = new List&lt;clsprofilesprp&gt;();
              while(dr.HasRows)
              {
                  clsprofilesprp k = new clsprofilesprp();
  
                  k.id = Convert.ToInt32(dr[0]);//Something wrong here?
  
                  k.name = dr[1].ToString();
                  k.password = dr[2].ToString();
                  k.description = dr[3].ToString();
                  k.created = Convert.ToDateTime(dr[4]);
                  k.modified = Convert.ToDateTime(dr[5]);
                  obj.Add(k);
              }
              dr.Close();
              cmd.Dispose();
              con.Close();
              return obj;
          }lesprp k = new clsprofilesprp();
  
          k.id = Convert.ToInt32(dr[0]);//Something wrong here?
  
                  k.name = dr[1].ToString();
                  k.password = dr[2].ToString();
                  k.description = dr[3].ToString();
                  k.created = Convert.ToDateTime(dr[4]);
                  k.modified = Convert.ToDateTime(dr[5]);
                  obj.Add(k);
              }
              dr.Close();
              cmd.Dispose();
              con.Close();
              return obj;
  </code></pre>