登录表单错误

时间:2011-05-09 19:52:59

标签: c# asp.net login

我正在创建一个登录表单。如果Login-id和password与Register表中存储的值匹配,它将从Register表中检索所有值,结果存储在SqlDataReader对象中。所以,现在我想访问accountid并从这个表中输入。我们怎么做它?

要了解我想说的内容,请查看以下代码 -

-------------------- Login.aspx.cs ---------------------- -----------------------------------------

protected void Submit_Click(object sender, EventArgs e)
{
string conStr = ConfigurationManager.ConnectionStrings["ROCConStr"].ConnectionString;
SqlConnection scon = new SqlConnection(conStr);
scon.Open();
SqlCommand cmd = new SqlCommand("select* from Register where email= @login_id and pwd=@password", scon);
SqlParameter Para;
Para = cmd.Parameters.Add("@login_id", SqlDbType.Char);
Para.Value = email.Text;
Para = cmd.Parameters.Add("@password", SqlDbType.Char);
Para.Value = pwd.Text;
SqlDataReader reader = cmd.ExecuteReader();
if(reader.HasRows)
{if (reader["account_type"]=="admin") /* error - Please see the bottom for more details.*/
Response.Redirect("http://localhost:1187/roc/WelcomeAdmin.aspx");
else
Response.Redirect("http://localhost:1187/roc/WelcomeUser.aspx");}
else
{ Label1.Text = "UserID or password is incorrect."; }
reader.Close();
scon.Close();
}

==================================================

<br>About the erro:- reader["account_type"]=="admin"

我不知道如何检索单个列的值。所以,我只是键入以显示我想要做的事情。我测试了这段代码,我收到了错误 - “没有数据时无效的读取尝试。”

2 个答案:

答案 0 :(得分:2)

您需要致电reader.Read()移至第一行。

或者,更改您的查询以仅选择所需的列,然后调用ExecuteScalar直接返回该值(如果没有行,则调用null)而根本不使用DataReader
(你不能这样做,因为你想要多个列)

答案 1 :(得分:1)

你只是检查过你是否'HasRows';但你仍然需要推进阅读器。 reader.Read()

那应该可以解决你的问题。您可能还需要考虑合并“using”语句来限制对象的范围,并修改URL以使用相对路径而不是绝对路径。这样,如果您部署到新环境或移动服务器,则不必删除硬编码的URL。