三层登录C#实现

三层登录C#实现


          首先,添加项目建立三层,其中显示层为Windows窗体应用程序(基于CS开发)或者是ASP.NET窗体应用程序(基于BS开发),业务逻辑层和数据访问层都是类库,不需要与用户进行交互的界面。

          调用关系,显示层调用业务逻辑层,业务逻辑层调用数据访问层,而这三层都必须的调用实体层,调用关系就是引用的关系,首先添加引用然后才可以调用。




显示层代码:

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

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //传统的数据库连接
            //IDbConnection conn = new SqlConnection("c……");
            //IDbCommand cmd = conn.CreateCommand();
            //cmd.CommandText = "Select UserName From USERS WHERE ……";
            //cmd.ExecuteReader();

            string userName = txtUserName.Text.Trim();
            string password = txtPassWord.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model.UserInfo user=mgr.UserLogin(userName, password);

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

        }
    }
}

业务逻辑层代码:

namespace Login.BLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName, string password)
        {
            throw new NotImplementedException();
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);

            if (user != null)// login successfully
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName, 10);
                return user;
            }
            else
            {
                throw new Exception ("登录失败。");
            }

        }
    }
}

数据访问层代码:

namespace Login.DAL
{
    class DbUtil
    {
        public static string ConnString = @"Server=vangjibin;Database=Login;User ID=sa;Password=vang_ji_bin";
    }
}
namespace Login.DAL
{
    public class ScoreDAO
    {
        public void UpdateScore(string userName, int value)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"INSERT INTO SCORES(UserName,Score)Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));
                conn.Open();
                cmd.ExecuteNonQuery();
            }
        }
    }
}
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); //not suggestion
                    if (!reader.IsDBNull (3))
                    {
                        user.Email =reader .GetString (3);
                    }
                }
                return user;
            }
        }
    }
}

实体层代码:

<span style="font-size:24px;">namespace Login.Model
{
    public class UserInfo
    {
        //Model为了在三层之间传输数据
        //在三个层中都要添加Model的引用
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }

    }
}
</span>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值