黑马程序员技术交流社区

标题: 准备用三层架构做一个项目,其中的登录怎么写? [打印本页]

作者: wang346351    时间: 2013-4-14 21:45
标题: 准备用三层架构做一个项目,其中的登录怎么写?
本帖最后由 wang346351 于 2013-4-16 11:12 编辑

试着自己开始写一个项目,写登录这个界面,之前写登录是在控制台应用程序中和单独的一个Web页面中写,三层的登录之间应该是通过参数的方式传值的把,我写了一个,想问下还有没有其他的方式方法?是不是可以通过Model实体层方式传值,怎么写?
我写的这个不能使用Session把账号存起来让另一个页面使用,所以想请教其他的方法。
代码如下:
DAL层
public class CompanyService
    {
        /// <summary>
        /// 管理员登录
        /// </summary>
        /// <param name="AgentCode"></param>
        /// <param name="AgentPWD"></param>
        /// <param name="Result"></param>
        /// <returns></returns>
        public void AdminLogin(string AdminCode, string AdminPWD, out bool Result)
        {
            bool result;
            string sql = "select * from Company where Name=@Name and Password=@Password";
            using (SqlConnection conn = new SqlConnection(@"Data Source=wang-pc;Initial Catalog=PhoneRechargeSys;User ID=sa Password=123 "))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.Add(new SqlParameter("@Name", AdminCode));
                cmd.Parameters.Add(new SqlParameter("@Password", AdminPWD));
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    result = true;
                }
                else
                {
                    result = false;
                }
                Result = result;
                //return Result;
            }
        }
    }
BLL层
public class CompanyManager
    {
        /// <summary>
        /// 管理员登录
        /// </summary>
        /// <param name="AgentCode"></param>
        /// <param name="AgentPWD"></param>
        /// <param name="Result"></param>
        /// <returns></returns>
        public bool AdminLogin(string AdminCode, string AdminPWD, out bool Result)
        {
            RechargeSys.DAL.CompanyService DALAdminService = new DAL.CompanyService();
            DALAdminService.AdminLogin(AdminCode, AdminPWD, out Result);
            return Result;
        }
    }
Model层
public class Company
    {
        #region 属性
        /// <summary>
        /// 公司ID
        /// </summary>
        public int ID { get; set; }
        /// <summary>
        /// 公司名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 帐号余额
        /// </summary>
        public double Money { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 添加日期
        /// </summary>
        public DateTime RegDate { get; set; }
        /// <summary>
        /// 帐号
        /// </summary>
        public string Account { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 接口帐号
        /// </summary>
        public string AppAccount { get; set; }
        /// <summary>
        /// 接口KEY
        /// </summary>
        public string AppKey { get; set; }
        /// <summary>
        /// 接口ID
        /// </summary>
        public string AppPartner { get; set; }
        /// <summary>
        /// 公司自留利润,以元为单位
        /// </summary>
        public double CompanyProfi { get; set; }
        #endregion
    }
Web界面
/// <summary>
        /// 管理员登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLogin_Click(object sender, EventArgs e)
        {
            bool Result;
            bool isSuccess;
            string AdminCode = this.txtAdminCode.Text.Trim();
            string AdminPwd = this.txtPWD.Text.Trim();
            RechargeSys.BLL.CompanyManager AdminManager = new CompanyManager();
            isSuccess = AdminManager.AdminLogin(AdminCode, AdminPwd, out Result);
            
            if (isSuccess==true)
            {
                //Response.Redirect("AdminIndex.aspx");
                this.lbMsg.Text = "登录成功!";
            }
            else
            {
                this.lbMsg.Text = "帐号/密码错误!";
            }
        }

作者: 小人物    时间: 2013-4-14 22:46
代码我就不写了,我给你说说我的思路吧!model层定义一个user对象,其中username属性和password属性!DAL层定义一个login方法,返回值为int,参数为User对象,
SQL语句是select count(*) from table where username={0} and pssword={1},user.username,user.password然后object obj=cmd.excuteScater();(单词写的不对,就是调用返回首行首列的那个方法),这个方法的返回值是object类型的,将他转换为int类型,并返回!在BLL层定义一个LOgin方法,也是返回int类型,参数也是user对象!接收DAL层的login方法的返回值!然后再表示层将user对象实例化!让user。username=用户名.text;user.password=密码框.text;然后调用BLL层的Login方法!将实例化后的user对象作为参数穿进去!最后判断一下返回的int类型的数值大小,大于0的话,就弹出个登录成功的提示,否则提示个密码或者账号错误的提示就可以了!大体的思路就是这样!
作者: wang346351    时间: 2013-4-15 00:15
小人物 发表于 2013-4-14 22:46
代码我就不写了,我给你说说我的思路吧!model层定义一个user对象,其中username属性和password属性!DAL层 ...

你说的这个方法和我上面的方法差不多,我想要的是在登录页面能使用Session把用户输入的账号存起来让另一个页面使用,判断用户是否已经登录了
作者: 陈志盟    时间: 2013-4-15 01:08
你在跳转页面之前写
Session["AdminCode"]=AdminCode;//把管理员名存在session中

在AdminIndex.aspx页面写上
string AdminCode=Session["AdminCode"].ToString();//把session的值赋值给AdminCode变量
这样就能把输入的账号名让另一个页面使用
作者: wang346351    时间: 2013-4-15 10:11
陈志盟 发表于 2013-4-15 01:08
你在跳转页面之前写
Session["AdminCode"]=AdminCode;//把管理员名存在session中

你在跳转页面之前写
Session["AdminCode"]=AdminCode;//把管理员名存在session中
这样写也不对把?
那Session["AdminCode"]=AdminCode而string AdminCode = this.txtAdminCode.Text.Trim();Session的值永远等于用户输入的账号了,都不会为空了,
作者: 陈志盟    时间: 2013-4-15 17:12
wang346351 发表于 2013-4-15 10:11
你在跳转页面之前写
Session["AdminCode"]=AdminCode;//把管理员名存在session中
这样写也不对把?

可以在项目里面新建一个项名字叫Global.asax  文件,在Session_start方法里进行初始化 。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2