【C#】三层登录
架构
U层调用B层,B层调用D层,大家都调用实体层
代码
U层
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cmdLogin_Click(object sender, EventArgs e)
{
//显示层绝对不能跟数据源打交道
try
{
string userName = txtUserName.Text.Trim();
string password = txtPassword.Text;
BLL.BLL.Administrator admin = new BLL.BLL.Administrator();
Model.Model.UserInfo user = admin.UserLogin(userName, password);
MessageBox.Show("登录用户:" + user.UserName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
B层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace BLL.BLL
{
public class Administrator
{
public Model.Model.UserInfo UserLogin(string userName, string password)
{
DAL.DAL.UserDAO uDao = new DAL.DAL.UserDAO();
Model.Model.UserInfo user = uDao.SelectUser(userName, password);
if (user != null)
{
DAL.DAL.ScoreDAO sDao = new DAL.DAL.ScoreDAO();
sDao.UpdateScore(user.ID,userName, 10);
return user;
}
else
{
throw new Exception("登录失败。");
}
}
}
}
D层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using System.Data;
//using System.Data.SqlClient;
namespace DAL.DAL
{
class DbUtil
{
public static string ConnString = @"Server=.;Database=Login;User ID=sa;Password=123456";
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace DAL.DAL
{
public class ScoreDAO//首次登录,增加10积分
{
public void UpdateScore(int ID, string userName, int value)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand(); //创建一个命令对象
cmd.CommandText = @"INSERT INTO SCORES(ID,UserName,Score) Values(@ID,@UserName,@Score)"; //修改Score表数据
cmd.Parameters.Add(new SqlParameter("@ID", ID));
cmd.Parameters.Add(new SqlParameter("@userName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace DAL.DAL
{
public class UserDAO
{
public Model.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();
Model.Model.UserInfo user=null;
while(reader.Read())
{
if (user ==null)//如果没有,则重新生成一个
{
user = new Model.Model.UserInfo();
}
user.ID = reader.GetInt32(0);
user.UserName = reader.GetString(1);
user.Password = reader.GetString(2);
user.Email = reader.GetString(3);
}
return user;
}
}
}
}
Model层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//在三层之间传输数据,不知道其他各个层次,独立于三个程序集不引用其他三层
namespace Model.Model
{
//一般封装数据,业务逻辑层
public class UserInfo
{
public int ID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
tips
1.user表中要提前插入用户名和密码等信息,作为原始管理员
2.成功登录后,再次登录要删除插入的score表数据
3.重新生成解决方案