三层代码的实现

  UI层:

  private void Button1_Click(object sender, EventArgs e)

  {

  string userName = txtuserName.Text.Trim();

  string password = txtpassword.Text;

  LoginBLL.LoginManaer mgr = new LoginBLL.LoginManaer();//实例化这个业务层类

  LoginModel.UserInfo user = mgr.UserLogin(userName, password);//将信息给model层

  MessageBox.Show("登录用户:" + user.UserName);//返回UI层

  }

  BLL层:

  public LoginModel.UserInfo UserLogin(string userName,string password)//获取用户传来的信息。

  {

  //需要和数据源打交道,实例化DAL层

  LoginDAL.UserDAO uDao = new LoginDAL.UserDAO();

  LoginModel.UserInfo user = uDao.SelectUser(userName, password);

  if (user !=null)//登录成功时

  {

  LoginDAL.ScoreDAO sDao = new LoginDAL.ScoreDAO();//增加积分。

  sDao.UpdateScore(userName, 10);

  return user;

  }

  else

  {

  throw new Exception("登录失败");//没有登录成功跳到这里

  }

  }

  }

  DAL层User层:

  public LoginModel.UserInfo SelectUser(string userName,string password )

  {

  //using 打开了数据库连接,从数据库中读取数据。

  using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))//此行代码是登录SQL Server用的。

  {

  //sqlcommand 表示可以对SQL Server数据库进行的操作。

  SqlCommand cmd = conn.CreateCommand();

  //获取数据表名

  cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password";

  //而CommandType是一个枚举类型。有三个值:text、StoredProcedure、TableDirect用于表示SqlCommand对象CommandType的执行形式。

  cmd.CommandType = CommandType.Text;//不写也可以的,因为Text是默认的

  //声明两个参数. Parameters是范围的意思。

  cmd.Parameters.Add(new SqlParameter("@UserName", userName));

  cmd.Parameters.Add(new SqlParameter("@Password", password));

  //登录数据库

  conn.Open();

  //要想使用SqlDateReader ,就必须引用上面的client命名空间。 并且如果想创建SqlDateReader,必须使用ExecuteReader方法。

  SqlDataReader reader = cmd.ExecuteReader();//对数据库进行查询得到结果,并且返回对象。

  LoginModel.UserInfo user = null;//先构造LoginModel,首先默认值为NULL

  while (reader.Read())//开始读取数据,如果用户名和密码不正确,无法读取数据,直接返回user为null。

  {

  if (user==null)//如果是null的话,再进行构造。

  {

  user = new LoginModel.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;

  }

  }

  Score层:

  public void UpdateScore(string userName,int value)//加分

  { 无锡妇科医院哪家好 http://mobile.xasgyy.net/

  //throw new NotFiniteNumberException();

  using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))

  {

  SqlCommand cmd = conn.CreateCommand();

  cmd.CommandText = @"INSERT INTO Score(UserName,Score) Values(@UserName,@Score)";

  cmd.Parameters.Add(new SqlParameter("@UserName", userName));

  cmd.Parameters.Add(new SqlParameter("@Score", value));

  conn.Open();

  cmd.ExecuteNonQuery();//必须引用using System.Data.SqlClient;此代码用来更新数据库。

  }

  }

  登录层:

  class DbUtil//工具类

  {

  //登录SQL Server代码

  public static string ConnString = @"Server=(local); Database=Login; User=sa; Password=12345";

  }

  }

  Model层:

  public class UserInfo

  {

  public int ID { get; set; }

  public string UserName { get; set; }

  public string Password { get; set; }

  public string Email { get; set; }

  }

原文地址:https://www.cnblogs.com/djw12333/p/11114499.html