无法在asp.net c#中使用三层架构登录页面
本文关键字:三层 登录 asp net | 更新日期: 2023-09-27 18:04:51
我正在做一个项目在asp.net c#使用vs 2008。我希望做我的项目在3层架构。我可以使用3tier将值插入到表中。但不能登录到页面,只有注册是可能的。在运行时,它显示错误为"过程或函数'login'期望参数'@iusername',该参数未提供。"
我的代码如下
表示层protected void submit_Click(object sender, EventArgs e)
{
String xusername = uname.Text;
String xpwd = pwd.Text;
try
{
bool match = oBAL.checking(xusername, xpwd);
if (match == true)
{
Session["Username"] = xusername;
Response.Redirect("page.aspx");
}
else
{
ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Invalid UserName or Password');", true);
}
}
catch (Exception ee)
{
Label1.Text = ee.Message.ToString();
}
finally
{
oBAL = null;
}
}
BusinessLayer
public bool checking(string susername, string spwd)
{
ownerDAL oDAL = new ownerDAL();
bool match = false;
DataSet ds = oDAL.Logincheck();
try
{
int noofrows = ds.Tables["Userstable"].Rows.Count;
for (int i = 0; i < noofrows; i++)
{
if ((ds.Tables["Userstable"].Rows[i]["username"].ToString() == susername) && (ds.Tables["Userstable"].Rows[i]["pwd"].ToString() == spwd))
{
match = true;
}
}
return match;
}
catch
{
throw;
}
finally
{
oDAL = null;
}
}
}
DataLayer
public DataSet Logincheck()
{
SqlConnection con = new SqlConnection(str);
con.Open();
SqlCommand cmd = new SqlCommand("login", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
try
{
da.Fill(ds, "Userstable");
return ds;
}
catch
{
throw;
}
finally
{
cmd.Dispose();
con.Close();
con.Dispose();
}
}
StoredProcedure
ALTER PROCEDURE dbo.login
(
@iusername varchar(50),
@ipwd varchar(50)
)
AS
BEGIN
SELECT username, pwd
FROM register
WHERE (username = @iusername) AND (pwd = @ipwd)
结束表名:register字段:用户名(primarykey)pwd
我认为这是一个简单的错误,但作为一个初学者,我找不到它。
您正在检查业务层的匹配所以你需要一个具有完整用户列表的数据集所以像这样修改程序
ALTER PROCEDURE dbo.login
AS
BEGIN
SELECT username, pwd
FROM register
或者您可以像这样将参数传递给过程(From DataLayer)
cmd.Parameters.Add(UserName);
cmd.Parameters.Add(Password);
您的存储过程需要两个参数来验证登录,而您没有提供它。将用户名和密码传递给您的Sp,或者将您的更改为以下内容,当您检查bl中的用户名和密码时将有效。
ALTER PROCEDURE dbo.login
AS
BEGIN
SELECT username, pwd FROM register
WHERE (username = @iusername) AND (pwd = @ipwd)
end
您的过程接受两个参数username和password,但是您没有提供它。更改您的DAL函数Logincheck()
以接受两个参数,就像您在业务层的bool checking(string susername, string spwd)
中所做的那样。
修改Logincheck()
,将参数传递给StoredProcedure..您不需要在BAL上再次进行额外的检查(用户名和密码),因为您已经在sp中进行了检查。您在DAL中的Logincheck()
可以根据凭据