登录形式错误

问题描述:

我正在创建登录表单。如果登录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" 

我不知道如何检索单个列的值。所以,我只是键入来显示我想要做什么。我测试了这个代码,我得到了错误 - “当数据不存在时无效尝试读取”。

+0

除非您真的需要每一列,否则不要编写'SELECT *'。 – SLaks 2011-05-09 19:57:20

+0

你应该在'using'语句中处理你的对象。 – SLaks 2011-05-09 19:57:35

+0

您可以重定向到“〜/ WelcomeUser.aspx”而不是对URL进行硬编码。只是建议 – turtlepick 2011-05-09 19:58:21

您需要拨打reader.Read()才能移至第一行。

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

+0

@caspar:感谢您的编辑。
@Slaks:我相信从现在开始我会为密码做这件事。 – Rafee 2011-05-09 23:33:53

你只检查看看你是否'HasRows';但你仍然需要推动读者。 reader.Read()

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