在我的上片文章中给大家简单讲解了下七层的概念性知识,现在来具体看看实在实现的!
B层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Factory;
using IDAL;
using System.Data;
namespace BLL
{
public class LoginBLL
{
public bool UserBLL(Entity.UserInfo UserInfo)
{
Factory.LoginFactory fact = new Factory.LoginFactory();//工厂实例化
IDAL.LoginIDAL idal = fact.CreateUser();//调用工厂方法创建接口
DataTable table = idal.selectUser(UserInfo);
Boolean falg;
if (table.Rows.Count == 0)
{
falg = false;
}
else
{
falg = true;
}
return falg ;
}
}
}
D
public class LoginDAL :IDAL.LoginIDAL
{
public DataTable selectUser(Entity.UserInfo UserInfo)
{
sqlHelper sqlhelper = new sqlHelper();
SqlParameter[] sqlParams =
{new SqlParameter("@UserName" , UserInfo.UserName) ,
new SqlParameter("@PassWord" , UserInfo.PassWord)};
string sql = @"SELECT * FROM USERS WHERE UserName = @UserName and PassWord = @PassWord ";
DataTable table = sqlhelper.ExecuteQuery(sql,sqlParams,CommandType.Text );
return table;
}
}
sqlHelper
public class sqlHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public sqlHelper()
{
string connStr = ConfigurationManager.AppSettings["connStr"];
conn = new SqlConnection(connStr);
}
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 执行不带参数的的增删改SQL语句或者存储过程
/// </summary>
/// <param name="cmdText">增删改查SQL</param>
/// <param name="ct">命令类型</param>
/// <returns>返回受影响的行数</returns>
public int ExecuteNonQuery(string cmdText,CommandType ct)
{
int res;
try
{
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State==ConnectionState.Open)
{
conn.Close();
}
}
return res;
}
/// <summary>
/// 执行带参数的的增删改SQL语句或者存储过
/// </summary>
/// <param name="cmdText">增删改查SQL</param>
/// <param name="paras">要查询的参数</param>
/// <param name="ct">命令类型</param>
/// <returns>返回受影响的行数</returns>
public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
int res;
using (cmd=new SqlCommand(cmdText,GetConn()))
{
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
res = cmd.ExecuteNonQuery();
}
return res;
}
/// <summary>
/// 执行不带参数的查询SQL语句或存储过程
/// </summary>
/// <param name="cmdText">查询SQL语句或存储过程</param>
/// <param name="ct">命令类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
/// <summary>
/// 执行带参数的查询SQL语句或存储过程
/// </summary>
/// <param name="cmdText">查询SQL语句或存储过程</param>
/// <param name="paras">参数集合</param>
/// <param name="ct">命令类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
using (sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
}
实体层(Entity)存放全局的实体类,方便各个层之前的参数调用。代码就不都写了!
Facade
public class LoginFacade
{
public Boolean SelectUser(Entity.UserInfo UserInfo)
{
bool flag;
BLL.LoginBLL userBLL = new BLL.LoginBLL();
flag = userBLL.UserBLL(UserInfo);
return flag;
}
}
Factory
public class LoginFactory
{
//string AssemblyName = "DAL";
//数据程序集名称,命名空间(DAL)
string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
//接受来自配置文件的数据
public IDAL.LoginIDAL CreateUser()
{
string className = StrDB + "." + "LoginDAL";//DAL层的类名
return (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(className);//反射加工厂的应用
}
}
IDAL (接口)
DataTable selectUser(Entity.UserInfo UserInfo);
UI(主界面登录)
private void btnOK_Click(object sender, EventArgs e)
{
string UserName = txtUserName.Text.Trim();
string PassWord = txtPassWord.Text;
//账户、密码验证
if (txtUserName.Text == string.Empty)
{
MessageBox.Show("请输入账户!", "登录");
return;
}
else
{
if (txtPassWord.Text == string.Empty)
{
MessageBox.Show("请输入密码", "登录");
}
//登录
//try
//{
//实例化外观层
Facade.LoginFacade fLogin = new Facade.LoginFacade();
Entity.UserInfo user = new Entity.UserInfo();
user.UserName = Convert.ToString(txtUserName.Text.Trim());
user.PassWord = Convert.ToString(txtPassWord.Text);
Boolean falg = false;
falg = fLogin.SelectUser(user);
if (falg != false)
{
MessageBox.Show("登录成功" + txtUserName.Text);
}
else
{
MessageBox.Show("登录失败QAQ" + txtUserName.Text);
}
}
}
代码部分到这里就整理完了,希望对大家会有所帮助!!!!!