前言:
相信大家都进行到了七层这一阶段,但是这个七层可是很折磨人的呐!不过还好,经过千辛万苦我终于战胜了它。
附上逻辑总结:逻辑总结博客地址
UI层
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnOK_Click_1(object sender, EventArgs e)
{
string UserName = txtUserID.Text.Trim();
string Password = txtUserPWD.Text;
//验证是否为空
if (txtUserID.Text == string.Empty)
{
MessageBox.Show("请输入账号!", "登录");
return;
}
else
{
if (txtUserPWD.Text == string.Empty)
{
MessageBox.Show("请输入密码!", "登录");
return;
}
//#region 登录
try
{
Facade.LoginFacade fLogin = new Facade.LoginFacade();//实例化外观
Entity.UserInfo user = new Entity.UserInfo();
//调用外观的方法,返回给user
user.UserName = Convert.ToString(txtUserID.Text.Trim());
user.Password = Convert.ToString(txtUserPWD.Text);
Boolean flag = false;
flag = fLogin.SelectUser(user);
if (flag != false)
{
MessageBox.Show("登录成功!");
}
else
{
MessageBox.Show("用户名密码或者错误");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}BLL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
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);//接受D层的返回值
Boolean flag;
if (table.Rows.Count == 0)
{
flag = false;
}
else
{
flag = true;
}
return flag;
}
}
}DAL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using SqlHelper;
namespace DAL
{
public class LoginDAL : IDAL.LoginIDAL
{
public DataTable selectUser(Entity.UserInfo UserInfo)
{
CommandType Text = 0;
sqlHelper sqlhelper = new SqlHelper.sqlHelper();
SqlParameter[] sqlParams = { new SqlParameter("@UserName", UserInfo.UserName), new SqlParameter("@PassWord", UserInfo.Password) };
string sql = @"select*from User_Info where userID=@UserName and PWD=@PassWord";
DataTable table = sqlhelper.ExecuteNonQuery(sql, Text, sqlParams);
return table;
}
}
}
IDAL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace IDAL
{
public interface LoginIDAL
{
DataTable selectUser(Entity.UserInfo UserInfo);
}
}
Factory层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Reflection;
using System.IO;
namespace Factory
{
public class LoginFactory
{
string AssemblyName = "DAL";
//数据程序集名称,命名空间(DAL)
string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
//接受来自配置文件的数据
public IDAL.LoginIDAL CreateUser()
{
string className = AssemblyName + "." + "LoginDAL";//DAL层的类名
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(className);//反射加工厂的应用
return idal;
}
}
}
Facade层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
public class LoginFacade
{
public Boolean SelectUser(Entity.UserInfo UserInfo)
{
bool flag;
BLL.LoginBLL userBLL = new BLL.LoginBLL();
flag = userBLL.UserBLL(UserInfo);
return flag;
}
}
}SQLHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
namespace SqlHelper
{
public class sqlHelper
{
public DataTable ExecuteNonQuery(string cmdTxt, CommandType cmdType, SqlParameter[] paras)
{
string StrDB = System.Configuration.ConfigurationManager.AppSettings["ConnStr"];
//接收来自配置文件的数据
SqlConnection conn = new SqlConnection(StrDB);
//创建数据库的连接
SqlCommand cmd = default(SqlCommand);
//定义命名变量
DataSet adataset = null;
//定义数据适配器,DataSet类表示一个存放在内存中的数据缓存
SqlDataAdapter adapter = default(SqlDataAdapter);
//sqldataadapter类目的是填充dataset
cmd = new SqlCommand(cmdTxt, conn);
//在conn上面执行实例化命令变量,并执行语句cmdtype
cmd.CommandType = cmdType;
//命令执行类型
cmd.Parameters.AddRange(paras);
//命令执行的参数
adapter = new SqlDataAdapter(cmd);
//初始化sqldataadapter类的新实例,用指定的cmd作为selectcommand的属性
adataset = new DataSet();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
adapter.Fill(adataset);
//向adapter对象中填充查询的数据
}
catch (Exception ex)
{
//Interaction.Msgbox(ex.Message);
//MessageBox.Show(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
return adataset.Tables[0];
//获取包含在dataset中的表的集合
}
public string ConnStr { get; set; }
}
}反射+配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key ="ConnStr" value="server=BRYANT; database=Login7;User ID = sa ; Password=123"/>
<add key ="DB" value="DAL" />
</appSettings>
</configuration>
小结:七层是这个阶段最重要的知识点,理解了七层有助于后面的机房合作。
本文通过实战案例详细解析了七层架构的设计与实现过程,包括UI层、BLL层、DAL层等各层的具体功能及相互间的交互方式。
2542

被折叠的 条评论
为什么被折叠?



