C#版三层登录
2016-03-15 20:33
483 查看
c#版 三层登录
先说一下三层,三层分为界面层(UI层),业务逻辑层(BLL层),数据访问层(DAL层)。在实现三层登录的时候的各层的功能和数据传送传送过程是这样的:
UI层:获取用户名和密码,将获取到的用户名和密码传送给B层。
BLL层:将U层传递过来的信息传递给DAL层,并接收D层返回来的查询结果。将查询结果和从U层传递来的数据进行比较。
DAL层:创建数据库连接,在数据库中查询用户名和密码,将查到的结果返回给B层。
下面用一张图来展现一下数据传送过程吧。
这里用到的实体并不是属于任何一个层次,起到封装数据的做用,用来传递数据的,三层中每个层次都会用到,它带着参数在三层之间流动。这是我对实体的理解。
每一层中的代码如下:
实体层:(封装、传递数据)
<span style="font-family:KaiTi_GB2312;font-size:24px;">public class UserInfo
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}</span>
U层:获取输入的用户名和密码,初始化B层,将数据传入到B层中
<span style="font-family:KaiTi_GB2312;font-size:24px;">public class LoginManager
{
public Login.Modle.UserInfo UserLogin(string userName, string passWord) //定义一个带有参数的方法
{
// throw new NotImplementedException();
Login.DAL.UserDAO uDao = new Login.DAL.UserDAO(); //初始化D层中的对象
Login.Modle.UserInfo user = uDao.SelectUser(userName, passWord); //把从U层收集的信息传递给D层
if (user != null)
{
Login.DAL.ScoreDAL sDao = new Login.DAL.ScoreDAL();
sDao.UpdateScore(userName, 10);
return user;
}
else
{
throw new Exception("登录失败"); //抛出异常
}
}
}</span>D 层:建立与数据库的连接和查询语句,对数据库进行查询,将查询的结果返回给B层。
连接数据库:
<span style="font-family:KaiTi_GB2312;font-size:24px;">class DbUtil
{
public static string ConnString = @"Server=LU;Database=Login;User ID =sa;Password=1";
}</span>
<span style="font-family:KaiTi_GB2312;font-size:24px;"> public Login.Modle.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();
Login.Modle.UserInfo user = null;
while (reader.Read())
{
if (user == null)
{
user = new Login.Modle.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;
}
}
</span>
运行出来的结果:
登录成功:
登录失败:
先说一下三层,三层分为界面层(UI层),业务逻辑层(BLL层),数据访问层(DAL层)。在实现三层登录的时候的各层的功能和数据传送传送过程是这样的:
UI层:获取用户名和密码,将获取到的用户名和密码传送给B层。
BLL层:将U层传递过来的信息传递给DAL层,并接收D层返回来的查询结果。将查询结果和从U层传递来的数据进行比较。
DAL层:创建数据库连接,在数据库中查询用户名和密码,将查到的结果返回给B层。
下面用一张图来展现一下数据传送过程吧。
这里用到的实体并不是属于任何一个层次,起到封装数据的做用,用来传递数据的,三层中每个层次都会用到,它带着参数在三层之间流动。这是我对实体的理解。
每一层中的代码如下:
实体层:(封装、传递数据)
<span style="font-family:KaiTi_GB2312;font-size:24px;">public class UserInfo
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}</span>
U层:获取输入的用户名和密码,初始化B层,将数据传入到B层中
<span style="font-family:KaiTi_GB2312;font-size:24px;"> private void btnLogin_Click(object sender, EventArgs e) { //获取输入的用户名和密码 string userName = txtUserName.Text.Trim(); string passWord = txtPassword.Text; try { Login.BLL.LoginManager mgr = new Login.BLL.LoginManager(); //初始化B层中的LoginManager Login.Modle.UserInfo user = mgr.UserLogin(userName ,passWord ); //把获取到的信息传递给B层 MessageBox.Show("登录用户:"+user.UserName ); } catch (Exception ex) { MessageBox.Show("用户{0}登录失败:",userName ); } }</span>B层:初始化D层中的对象,将数据传入到D层,并处理从D层返回来的数据。
<span style="font-family:KaiTi_GB2312;font-size:24px;">public class LoginManager
{
public Login.Modle.UserInfo UserLogin(string userName, string passWord) //定义一个带有参数的方法
{
// throw new NotImplementedException();
Login.DAL.UserDAO uDao = new Login.DAL.UserDAO(); //初始化D层中的对象
Login.Modle.UserInfo user = uDao.SelectUser(userName, passWord); //把从U层收集的信息传递给D层
if (user != null)
{
Login.DAL.ScoreDAL sDao = new Login.DAL.ScoreDAL();
sDao.UpdateScore(userName, 10);
return user;
}
else
{
throw new Exception("登录失败"); //抛出异常
}
}
}</span>D 层:建立与数据库的连接和查询语句,对数据库进行查询,将查询的结果返回给B层。
连接数据库:
<span style="font-family:KaiTi_GB2312;font-size:24px;">class DbUtil
{
public static string ConnString = @"Server=LU;Database=Login;User ID =sa;Password=1";
}</span>
<span style="font-family:KaiTi_GB2312;font-size:24px;"> public Login.Modle.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();
Login.Modle.UserInfo user = null;
while (reader.Read())
{
if (user == null)
{
user = new Login.Modle.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;
}
}
</span>
运行出来的结果:
登录成功:
登录失败:
相关文章推荐
- C#中两个窗口怎么传递参数?或者怎么使用另一个窗口的控件呢?
- c# get{}set{}
- C#基础之反射
- C#知识点-反射
- C#基础
- 简单工厂模式(设计模式02)
- C#中IList<>和List<>的区别小结
- c#FileStream文件读写
- c#调试遇到的问题
- C# .NET Random 生成随机数字和字母
- C# 中方法、类的默认修饰符
- C#的装箱拆箱
- VS,C#--拼图小游戏
- C#解leetcode 16. 3Sum Closest
- C#进阶目录
- C#获取当前日期时间
- C#第十六节课
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
- C#中的日期处理函数
- C# 中的"yield"使用