三层代码的实现
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; }
}