Cip*_*her 3 c# asp.net datareader no-data
我想在我的ASP.NET网站上创建一个登录表单.目前,存在一些问题.我正在尝试合并功能,以便登录用户具有仅查看其个人资料的优势.登录页面上的代码是这样的:
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");
}
Run Code Online (Sandbox Code Playgroud)
登录后,用户将被移动到该人员登录后可以查看其个人资料的页面.会话正在从登录页面正确获取登录人员的值,并成功将其传递到下一页.但是在这个配置文件页面上发生错误,我认为grid_bind()下面的方法中存在问题
public void grid_bind()
{
business.clsprofiles obj = new business.clsprofiles();
List<business.clsprofilesprp> objprp = new List<business.clsprofilesprp>();
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();
}
Run Code Online (Sandbox Code Playgroud)
正如业务逻辑中的错误所述,"当dr中没有数据时无效的读取尝试"
public List<clsprofilesprp> 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<clsprofilesprp> obj = new List<clsprofilesprp>();
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;
Run Code Online (Sandbox Code Playgroud)
Len*_*rri 11
你必须打电话DataReader.Read来获取结果:
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
// ...
Run Code Online (Sandbox Code Playgroud)
DataReader.Read 返回一个布尔值,所以如果你有多个结果,你可以这样做:
While (dr.Read())
{
// read data for each record here
}
Run Code Online (Sandbox Code Playgroud)
此外,当这部分代码中没有时,你试图访问dr数据:
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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13530 次 |
| 最近记录: |