简单的聊一下写这篇博客的背景,在敲三层的时候,用的是自己的数据库,所以在敲完后出现不少问题。敲三层的视频还是有漏洞的,他只能在显示登录成功,却不能显示登录失败,只要你输入的用户名和密码不正确,就会报错。
在敲登录窗体时,在三层之间的数据转换的大概思路就是,U层调用B层,B层调用D层,这三层都会调用实体层,实体层就像VB中的模块一样。D层中是写与连接调用数据库相关的东西的,所以我们一般就会从D层开始写起。
输入密码后调用的顺序是这样的:
实体层声明用户名和密码
<span style="font-size:18px;"> public class LoginInfo//声明一个公共访问类实体
{
private string _UserName;//声明私有字段值用户名
public string UserName//声明共有属性用户名(在外界可以访问到)
{
get { return _UserName; }
set { _UserName = value; }
}
private string _Password;//声明字段密码
public string Password //声明可以访问的属性密码
{
get { return _Password; }
set { _Password = value; }
}
private string _ID;
public string ID
{
get { return _ID; }
set { _ID = value; }
}
}</span>
D层分为两个部分 一个是连接数据库的DBUtil.cs类,一个是读数据库用户名和密码的LoginDAL.cs类
<span style="font-size:18px;"> public class DBUtil
{
public static string connString = @"Server=(local);Database=charge_sys;User ID=sa;password=123456";
}</span>
Server:服务器的名称 可以是(local)也可以用" ."(点)表示,我用的是机房收费的数据库,所以数据库名称是Charge_sys.
<span style="font-size:18px;"> public EntityClass.LoginInfo SelectUser(string userID, string PWD)
{
using (SqlConnection conn = new SqlConnection(DBUtil.connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT userID,PWD From User_Info WHERE userID=@userID AND PWD=@PWD";//Select 字段 From 数据库表 Where 字段名=@字段名 AND 密码=@密码
cmd.CommandType = CommandType.Text; //获取或设置一个值,该值指示如何解释commandText属性
cmd.Parameters.Add(new SqlParameter("@userID", userID));//设置参数用户名
cmd.Parameters.Add(new SqlParameter("@PWD", PWD));//设置参数密码
conn.Open();//打开连接
SqlDataReader reader=cmd.ExecuteReader();//用户对用户进行查询操作,sqlDataReader在数据库中进行逐行读取
EntityClass.LoginInfo user = null; //构造User 默认值是null
while (reader.Read())//读取具体数据
{
reader.GetInt32(0);
if (user ==null )
{
user = new EntityClass.LoginInfo();//实例化实体层
}
user.UserName = reader.GetInt32(0).ToString();//读取数据库第0列中内容(读取用户名)
user.Password = reader.GetString (1);//读取数据库中密码
}
return user;
}
} </span>
在逻辑层进行判断
在U层参数有相应的变化
<span style="font-size:18px;"> private void btnLogin_Click(object sender, EventArgs e)
{
string UserName = txtUserName.Text.Trim();
string password = txtPassword.Text;
string msg;
msg="";
ChargeSystem.BLL.LoginClass mgr = new ChargeSystem.BLL.LoginClass();//实例化逻辑业务层
EntityClass.LoginInfo user = mgr.Login(UserName, password,out msg );
MessageBox.Show(msg);
}</span>