接着上篇三层学习博客,深入学习下三层的代码;
解决方案中一共四个项目,分别是UI、BLL、DAL、和Model;
引用部分: UI层引用BLL和Model;BLL层引用DAL和Model;DLL层引用Model;
很容易理解,UI——>BLL——>DAL; 上一层引用下一层,公共部分Model都需要添加引用;
首先是U层
namespace LoginUI
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()//规定的格式,程序的入口;
{
Application.EnableVisualStyles();//管理应用程序,启用应用程序的可视样式;
Application.SetCompatibleTextRenderingDefault(false);//某些控件上定义的设置为默认值;
Application.Run(new Form1());
}
}
}
其次是B层
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("登陆失败");
}
}
}
}
D层
namespace Login.DAL
{
class DbUtil
{
public static string ConnString = @"Server=DESKTOP-4JRTBT0;Database=Login;User ID=sa;Password=123456; ";//连接数据库
}
}
-------------------------------------------------------------------------
namespace Login.DAL
{
public class ScoreDAO
{
public void UpdateScore(string userName, int value)
{
//throw new NotFiniteNumberException();
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();//对连接执行SQL语句并返回所有影响的行数,判断SQL语句是否成功;
}
}
}
}
-------------------------------------------------------------------------
namespace Login.DAL
{
public class UserDAO
{
public Login.Model.UserInfo SelectUser(string userName, string password)
{
//throw new NotImplementedException();
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;
}
}
}
}
最后是Model
namespace Login.Model
{
public class UserInfo
{
public int ID { get; set; }//get和set设置让外部对其访问
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
这样梳理完后对三层的理解会更深刻,对部分代码的理解还不够到位,欢迎随时交流;