三层登录C#实现
首先,添加项目建立三层,其中显示层为Windows窗体应用程序(基于CS开发)或者是ASP.NET窗体应用程序(基于BS开发),业务逻辑层和数据访问层都是类库,不需要与用户进行交互的界面。
调用关系,显示层调用业务逻辑层,业务逻辑层调用数据访问层,而这三层都必须的调用实体层,调用关系就是引用的关系,首先添加引用然后才可以调用。
显示层代码:
namespace LoginUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//传统的数据库连接
//IDbConnection conn = new SqlConnection("c……");
//IDbCommand cmd = conn.CreateCommand();
//cmd.CommandText = "Select UserName From USERS WHERE ……";
//cmd.ExecuteReader();
string userName = txtUserName.Text.Trim();
string password = txtPassWord.Text;
Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
Login.Model.UserInfo user=mgr.UserLogin(userName, password);
MessageBox.Show("登录用户:" + user.UserName);
}
}
}
业务逻辑层代码:
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 ("登录失败。");
}
}
}
}
数据访问层代码:
namespace Login.DAL
{
class DbUtil
{
public static string ConnString = @"Server=vangjibin;Database=Login;User ID=sa;Password=vang_ji_bin";
}
}
namespace Login.DAL
{
public class ScoreDAO
{
public void UpdateScore(string userName, int value)
{
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();
}
}
}
}
namespace Login.DAL
{
public class UserDAO
{
public Login.Model.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 .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;
}
}
}
}
实体层代码:
<span style="font-size:24px;">namespace Login.Model
{
public class UserInfo
{
//Model为了在三层之间传输数据
//在三个层中都要添加Model的引用
public int ID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
</span>