无法在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

我认为这是一个简单的错误,但作为一个初学者,我找不到它。

无法在asp.net c#中使用三层架构登录页面

您正在检查业务层的匹配所以你需要一个具有完整用户列表的数据集所以像这样修改程序

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()可以根据凭据

返回真/假。