C#版的三层登陆

        三层的学习我们已经走过,现在我们来了解一下到底什么是三层,顺便我们将例子中的C#版本的拿来说道说道。

我们所说的三层是指逻辑上的三层,这点我们需要搞清楚,分别是 UI/BLL+DAL/DB,当然了这里的DB指的是数据库,而这个呢就是我们所说的真正三层,但是我们在平常交流是经常试讲BLL和DAL分开,这样就成了显示层UI、业务逻辑层BLL 、数据访问层DAL这三层。既然有逻辑上的三层,那么必然有物理上的三层,那就是显示层、业务层、数据层,它们所对应的就是用户界面、应用逻辑、数据库。

而在这三层之外还存在一个公用的东东叫做实体,三层之间同时存在着互相调用,关系是:UI→BLLDAL来达到解耦的效果,并提高系统的稳定性。

在具体的应用中呢调用关系是这个样子的:首先在实体中定义需要调用的属性,在U层中将值传进实体中,调用B层中方法同时将实体中的参数传过去,接着B层调用D层的方法,将实体再传进去,D层连接数据库将按条件查询到的内容传回B层,B层对数据进行验证,接着传回U层,这样就完成了三层。

下面就将C#的例子拿来,大家看着例子好好琢磨一下。

U层:

namespace loginUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnlogin_Click(object sender, EventArgs e)
        {
           //若是没有三层结构应该这样
            //IDbConnection conn = new sqlconnection();
            //IDbConnection cmd = conn.CreateCommand();
            //cmd.commandtext = "select UserName From USERS WHERE";


            //对实体进行赋值
            string userName=txtUserName .Text .Trim ();
            string password = txtPassword .Text;


            //实例化B层的方法,实现调用并传值
            login.BLL.loginManager mgr = new login.BLL.loginManager();
            login.Model.UserInfo user = mgr.Userlogin(userName, password);


            MessageBox.Show("登录用户:"+user.UserName );
        }
    }
}
B层

namespace login.BLL
{
    public  class loginManager
    {
        public login.Model .UserInfo  Userlogin(string userName, string password)
        {
            //实例化D层,并将值进行传递
            login.DAL.UserDAO uDAO = new login.DAL.UserDAO();
            login .Model .UserInfo user=  uDAO.SelectUser(userName ,password );

            //对D层返回的数据进行验证
            if (user != null)//login successfully.
            {
                login.DAL.ScoreDAO sDAO = new login.DAL.ScoreDAO();
                sDAO.UpdateScore(userName, 10);
                return user;
            }
            else//失败
            {
                throw new Exception("登陆失败。");
            }
        }
    }
}
D层

namespace login.DAL
{
    public  class UserDAO
    {
        public login.Model .UserInfo  SelectUser(string userName, string password)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                //定义数据库连接符
                SqlCommand cmd = conn.CreateCommand();
                //查询语句
                cmd.CommandText = @"SELECT ID , UserName,Password,Email
                                    FROM USERS WHERE UserName=@UserName AND Password=@Password";
                cmd.CommandType = CommandType.Text;
                //这一步是对查询语句进行赋值
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters .Add (new SqlParameter ("@Password",password ));

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                login.Model.UserInfo user = null;
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new login.Model.UserInfo();
                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                    
                }
                return user;
            }
        }
    }
}
希望能给大家带来一些帮助,但是不要复制粘贴,要亲自动手将这些代码敲上去,这样才能更加深刻的理解三层的含义。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值