关于三层,看完一遍,想着开始敲七层,看着别人的代码敲都有点找不到,于是重新敲了一遍三层,收获很多!
首先,它没有模板,也不是一下子就完成的,它是有思路的,根据思路走,整个过程就是很自然而然的过程!
DAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
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 ,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;
}
//throw new NotImplementedException();//在无法实现请求的操作和方法时的操作
}
}
}
BLL
UserDAO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.BLL
{
public class LoginManager
{
public Login.Model.UserInfo Login(string userName,string password)
{
Login.DAL.UserDAO uDAO = new DAL.UserDAO();
Login.Model.UserInfo user = uDAO.SelectUser(userName, password);
if(user!=null)
{
Login.DAL.ScoreDAO sDAO = new Login.DAL.ScoreDAO();
sDAO.UpdateScore(userName, 10);
return user;
}
else
{
throw new Exception("登录失败");
}
}
}
}
ScoreDAO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace Login.DAL //data access level DAO data access Object
{
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) Value(@UserName,@Score)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
DBUtil
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.DAL
{
class DBUtil
{
public static string ConnString = @"Server=Rancho; Database=Login; Uid=sa; Password=123456 ";
}
}
Model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.Model
{
public class UserInfo
{
private int iD;
private string userName;
private string password;
private string email;
public int ID { get => iD; set => iD = value; }
public string UserName { get => userName; set => userName = value; }
public string Password { get => password; set => password = value; }
public string Email { get => email; set => email = value; }
}
}
UI层
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LoginUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void butLogin_Click(object sender, EventArgs e)
{
//IDbConnection conn = new SqlConnection("....");
//IDbCommand cmd = conn.CreateCommand();
//cmd.CommandText = "Select UserName From UserTable 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.Login(userName ,password );
MessageBox.Show("登录用户:" + userName);
}
}
}