登录形式错误
我正在创建登录表单。如果登录ID和密码与存储在寄存器表中的值相匹配,它会从寄存器表中检索所有值,并从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 [email protected]", 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"
我不知道如何检索单个列的值。所以,我只是键入来显示我想要做什么。我测试了这个代码,我得到了错误 - “当数据不存在时无效尝试读取”。
您需要拨打reader.Read()
才能移至第一行。
或者更改查询只选择你想要的列,然后调用
ExecuteScalar
直接返回值(或
null
如果没有行),而不使用DataReader的。
(你不能这样做,因为你想要多个列)
@caspar:感谢您的编辑。
@Slaks:我相信从现在开始我会为密码做这件事。 –
Rafee
2011-05-09 23:33:53
你只检查看看你是否'HasRows';但你仍然需要推动读者。 reader.Read()
这应该解决您的问题。您可能还需要考虑合并“使用”语句以限制对象的范围并修改您的URL以使用相对路径而不是绝对路径。这样,如果您部署到新环境或移动服务器,则不必删除硬编码的URL。
除非您真的需要每一列,否则不要编写'SELECT *'。 – SLaks 2011-05-09 19:57:20
你应该在'using'语句中处理你的对象。 – SLaks 2011-05-09 19:57:35
您可以重定向到“〜/ WelcomeUser.aspx”而不是对URL进行硬编码。只是建议 – turtlepick 2011-05-09 19:58:21