zoukankan      html  css  js  c++  java
  • 三层登录—c#

        学习了三层,有一个登录窗口的小练习。是我们第一次接触三层的初战。如今仅仅是简单的了解了一些,须要学习的还有非常多,以下浅谈自己的理解。

        我们说的三层就是分层了显示层、业务逻辑层和数据訪问层。当中显示层是直接和客户打交道的,是用户的显示界面;而业务逻辑层是处理业务的,是中间的桥梁。联系着显示层和数据訪问层,把用户的请求进行分析处理,在给数据源写入;那么数据訪问层是做什么的呢?主要操纵数据库,对数据库中的数据进行增删改查的处理。这样各个层次就有了自己特定的功能,达到了高内聚低耦合的效果。

    这是一个简单的登录窗口的实现过程。


    【显示UI层】

    <span style="font-family:KaiTi_GB2312;font-size:18px;">    private void btnOK_Click(object sender, EventArgs e)//登录button
            string UserName=txtUserName.Text.Trim ();//username赋值给UserName
            string Password=txtPassWord .Text ;     //password赋值给Password
            Login<span style="color:#FF0000;">.<strong>BLL.LoginManager</strong></span> mgr = new Login.BLL.LoginManager();//实例化出BLL层中的LoginManager,两个引用的实现
            Login.<span style="color:#333333;"><strong>Model.UserInfo</strong></span> user=mgr.UserLogin(UserName, Password);//调用BLL层中的方法UserLogin
            MessageBox.Show("登录用户:" + user.UserName);</span>

    【业务逻辑层BLL层】

    <span style="font-family:KaiTi_GB2312;font-size:18px;">    public class  <span style="color:#FF0000;"><strong>LoginManager</strong></span>//调用BLL层中的LoginManager
        {
            public Login.Model.UserInfo <span style="color:#FF0000;"><strong>UserLogin</strong></span>(string UserName,string Password)
            {
                Login.<span style="color:#FF0000;"><strong>DAL.UserDAO</strong></span> uDao = new Login.DAL.UserDAO();//实例化DAL层中的UserADO
                Login.<strong>Model.UserInfo</strong> user=uDao.SelectUser(UserName, Password);//在数据层DAL。调用方法SelectUser推断username和password
                if (user!=null)
                {
                    Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();//实例出DAL层的ScoreDAO。对登录成功的用户进行加分操作
                    sDao.UpdateScore(UserName, 10);
                    return user;
                }
                else
                {
                    throw new Exception("登录失败");
                }
            }
    </span>

    【数据訪问层DAL】

    <span style="font-family:KaiTi_GB2312;font-size:18px;">public static string conString = @"Server=LFH;Database=LoginSanCeng;User ID=sa;Password=1";//链接数据库
    
    public  Login.Model.UserInfo <span style="color:#FF0000;"><strong>SelectUser</strong></span>(string UserName,string Password)
            {
                using (SqlConnection conn = new SqlConnection(DBUtil.conString)) //通过參数DBUtil.conString打开连接数据
                {
                    SqlCommand cmd = conn.CreateCommand();//创建cmd运行sql语句
                    cmd.CommandText = @"SELECT ID,UserName,Password,Emall FROM Users WHERE UserName=@UserName AND Password=@Password";//sql语句
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add(new SqlParameter("@UserName", UserName));//Parameters加入參数
                    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.Emall = reader.GetString(3);
                        }            
                    }
                    return user;
                }
            }
        }
    
    public void <span style="color:#FF0000;"><strong>UpdateScore</strong></span>(string UserName,int value)//更新分数操作
            {
                using (SqlConnection conn=new SqlConnection(DBUtil.conString ))//打开数据库链接
                {
                    SqlCommand cmd = conn.CreateCommand ();//创建运行sql语句
                    cmd.CommandText = @"INSERT INTO SCORE(UserName,Score) Values(@UserName,@Score)";//sql语句
                   cmd.Parameters.Add(new SqlParameter("@UserName", UserName));加入到数据库中
                    cmd.Parameters.Add(new SqlParameter("@Score", value));
                    //cmd.Parameters.Add(new SqlParameter("@ID", value));
                    conn.Open();打开数据库
                    cmd.ExecuteNonQuery();//运行sql语句,返回整数变量
                }
            }</span>

        当中三层登录就是UI层引用BLL层的逻辑进行业务分析,BLL层引用DAL层进行数据推断,假设数据正确用户能够登录成功通过BLL层返回给UI层,UI显示给客户。Model层是封装数据的,提供给其它三个层次,它是独立的,不引用不论什么层的逻辑,甚至不知道其它层次的存在,仅仅是提供了服务,是最无私的。UI引用了BLL层和Model层,BLL层引用DAL和Model层。从而实现了UI层和DAL的间接联系,而DAL层引用了Model层,主要是对数据库的操作。

         三层就是把一个系统分成部分,每一个部分负责一定的职责,各尽其职,各司其守。不可越俎代!


  • 相关阅读:
    Mysql 一次性备份导出/导入恢复所有数据库
    MySQL数据备份之mysqldump使用
    mysql数据库误删除后的数据恢复操作说明
    Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)
    Qt paintEvent绘制窗体 注意Qt::WA_PaintOutsidePaintEvent 只是适用于X11,其他系统均无效
    Building PySide on Microsoft Windows
    浅议Delphi中的Windows API调用(举的两个例子分别是String和API,都不错,挺具有代表性)
    Qt多线程学习-用例子来理解多线程
    Nutch之简介与安装
    RPC框架实现
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7053823.html
Copyright © 2011-2022 走看看