[原创] Asp.Net三层体系结构应用实例(2)源代码

![[原创] Asp.Net三层体系结构应用实例(2)源代码 [原创] Asp.Net三层体系结构应用实例(2)源代码](http://www.csframework.com/images/seo/SEO-cs%E6%A1%86%E6%9E%B6%E7%BD%91.jpg)
代码实现:
TUser.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
/*
实体类仅定义数据模型,该模型应与数据表对应,属性定义与数据表的字段名一致。
网上有很多3层架构生成工具,实体类生成工具.如大数据表,大量数据表需要建立实体类时,建议使用
实体类生成工具。手工输入是极费时的苦差事。
*/
/// <summary>
/// 用户模型,实体类.
/// </summary>
public class TUser
{
private int _isid = 0;
private string _userName;
private string _userID;
private string _password;
public int isid { get { return _isid; } set { _isid = value; } }
public string UserID { get { return _userID; } set { _userID = value; } }
public string UserName { get { return _userName; } set { _userName = value; } }
public string Password { get { return _password; } set { _password = value; } }
}
}
using System.Collections.Generic;
using System.Text;
namespace Models
{
/*
实体类仅定义数据模型,该模型应与数据表对应,属性定义与数据表的字段名一致。
网上有很多3层架构生成工具,实体类生成工具.如大数据表,大量数据表需要建立实体类时,建议使用
实体类生成工具。手工输入是极费时的苦差事。
*/
/// <summary>
/// 用户模型,实体类.
/// </summary>
public class TUser
{
private int _isid = 0;
private string _userName;
private string _userID;
private string _password;
public int isid { get { return _isid; } set { _isid = value; } }
public string UserID { get { return _userID; } set { _userID = value; } }
public string UserName { get { return _userName; } set { _userName = value; } }
public string Password { get { return _password; } set { _password = value; } }
}
}
dalUser.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Models;
namespace DataAccessLayer
{
/*****************************************************************
* 3层结构执行顺序:1.WebUI->2.BLL->3.DAL->OleDB->4.SQL SERVER/ACCESS
*
* 数据访问层(dal)顾名思义该层是与数据库交互的层级。如获取数据,更新数据,插入记录等等。
* 它的上一级是业务逻辑层.业务逻辑层需要操作某数据时,调用数据访问层的接口,数据访问层操作
* OleDb接口访问Access数据库,最后返回数据。
*
* *** 注意***
*
* 为了方便演示,这里面所有Sql语句都是拼接而成,这种方式极不安全,为黑客注入js脚本提供便利。
* 最好改成传参数的方式。关于如何防范SQL注入,不是本程序涵盖内容。
*
* by www.csframework.com - C/S框架网
*****************************************************************/
/// <summary>
/// 用户的数据存取层
/// </summary>
public class dalUser
{
private static dalUser _Instance = null;
public static dalUser Instance
{
get
{
if (_Instance == null) _Instance = new dalUser();
return _Instance;
}
}
/// <summary>
/// 获取所有用户列表
/// </summary>
/// <returns></returns>
public DataTable GetUsers()
{
string sql = "select * from [t_User]";
return DataProvider.Instance.GetTable(sql, "t_User");
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user">用户对象</param>
/// <returns></returns>
public bool AddUser(TUser user)
{
//往数据库写入记录
string sql = "insert into [t_User]([UserID],[UserName],[Password]) values (''''{0}'''',''''{1}'''',''''{2}'''') ";
sql = string.Format(sql, user.UserID, user.UserName, user.Password);
int i = DataProvider.Instance.ExecNoQuery(sql);
return i > 0;
}
/// <summary>
/// 用户登录
/// </summary>
/// <param name="userID">登录帐号</param>
/// <returns></returns>
public bool Login(string userID, string password)
{
string sql = "select count(*) from [t_User] where [UserID]=''''" + userID + "'''' and [Password]=''''" + password + "''''";
object o = DataProvider.Instance.ExecScalar(sql);
return int.Parse(o.ToString()) > 0;
}
/// <summary>
/// 检查用户是否存在
/// </summary>
/// <param name="userid">用户编号</param>
/// <returns></returns>
public bool ExistsUser(string userid)
{
string sql = "select count(*) from [t_User] where [UserID]=''''" + userid + "''''";
object o = DataProvider.Instance.ExecScalar(sql);
return int.Parse(o.ToString()) > 0;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Data;
using Models;
namespace DataAccessLayer
{
/*****************************************************************
* 3层结构执行顺序:1.WebUI->2.BLL->3.DAL->OleDB->4.SQL SERVER/ACCESS
*
* 数据访问层(dal)顾名思义该层是与数据库交互的层级。如获取数据,更新数据,插入记录等等。
* 它的上一级是业务逻辑层.业务逻辑层需要操作某数据时,调用数据访问层的接口,数据访问层操作
* OleDb接口访问Access数据库,最后返回数据。
*
* *** 注意***
*
* 为了方便演示,这里面所有Sql语句都是拼接而成,这种方式极不安全,为黑客注入js脚本提供便利。
* 最好改成传参数的方式。关于如何防范SQL注入,不是本程序涵盖内容。
*
* by www.csframework.com - C/S框架网
*****************************************************************/
/// <summary>
/// 用户的数据存取层
/// </summary>
public class dalUser
{
private static dalUser _Instance = null;
public static dalUser Instance
{
get
{
if (_Instance == null) _Instance = new dalUser();
return _Instance;
}
}
/// <summary>
/// 获取所有用户列表
/// </summary>
/// <returns></returns>
public DataTable GetUsers()
{
string sql = "select * from [t_User]";
return DataProvider.Instance.GetTable(sql, "t_User");
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user">用户对象</param>
/// <returns></returns>
public bool AddUser(TUser user)
{
//往数据库写入记录
string sql = "insert into [t_User]([UserID],[UserName],[Password]) values (''''{0}'''',''''{1}'''',''''{2}'''') ";
sql = string.Format(sql, user.UserID, user.UserName, user.Password);
int i = DataProvider.Instance.ExecNoQuery(sql);
return i > 0;
}
/// <summary>
/// 用户登录
/// </summary>
/// <param name="userID">登录帐号</param>
/// <returns></returns>
public bool Login(string userID, string password)
{
string sql = "select count(*) from [t_User] where [UserID]=''''" + userID + "'''' and [Password]=''''" + password + "''''";
object o = DataProvider.Instance.ExecScalar(sql);
return int.Parse(o.ToString()) > 0;
}
/// <summary>
/// 检查用户是否存在
/// </summary>
/// <param name="userid">用户编号</param>
/// <returns></returns>
public bool ExistsUser(string userid)
{
string sql = "select count(*) from [t_User] where [UserID]=''''" + userid + "''''";
object o = DataProvider.Instance.ExecScalar(sql);
return int.Parse(o.ToString()) > 0;
}
}
}
DataProvider.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
namespace DataAccessLayer
{
/// <summary>
/// 数据提供者.
/// </summary>
public class DataProvider
{
private static DataProvider _Instance = null;
/// <summary>
/// 数据提供者对象实例,因程序频繁请求数据,减少创建对象的次数。
/// </summary>
public static DataProvider Instance
{
get
{
if (_Instance == null)
{
_Instance = new DataProvider();
}
return _Instance;
}
}
private string _dbPath = "";
/// <summary>
/// Access数据库路径
/// </summary>
public string DBPath { get { return _dbPath; } set { _dbPath = value; } }
/// <summary>
/// 提供数据表
/// </summary>
/// <param name="sql">SQL 查询语句</param>
/// <param name="tableName">数据表名</param>
/// <returns></returns>
public DataTable GetTable(string sql, string tableName)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable(tableName);
adp.Fill(dt);
conn.Close();
conn.Dispose();
return dt;
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public object ExecScalar(string sql)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
object o = cmd.ExecuteScalar();
conn.Close();
conn.Dispose();
return o;
}
/// <summary>
/// 针对 System.Data.OleDb.OleDbCommand.Connection 执行 SQL 语句并返回受影响的行数。
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecNoQuery(string sql)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
int ret = cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
return ret;
}
/// <summary>
/// 创建一个OleDbConnection连接.
/// </summary>
/// <returns></returns>
private System.Data.OleDb.OleDbConnection CreateConnection()
{
string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath;
OleDbConnection conn = new OleDbConnection(connStr);
if (conn.State != ConnectionState.Connecting) conn.Open();
return conn;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
namespace DataAccessLayer
{
/// <summary>
/// 数据提供者.
/// </summary>
public class DataProvider
{
private static DataProvider _Instance = null;
/// <summary>
/// 数据提供者对象实例,因程序频繁请求数据,减少创建对象的次数。
/// </summary>
public static DataProvider Instance
{
get
{
if (_Instance == null)
{
_Instance = new DataProvider();
}
return _Instance;
}
}
private string _dbPath = "";
/// <summary>
/// Access数据库路径
/// </summary>
public string DBPath { get { return _dbPath; } set { _dbPath = value; } }
/// <summary>
/// 提供数据表
/// </summary>
/// <param name="sql">SQL 查询语句</param>
/// <param name="tableName">数据表名</param>
/// <returns></returns>
public DataTable GetTable(string sql, string tableName)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable(tableName);
adp.Fill(dt);
conn.Close();
conn.Dispose();
return dt;
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public object ExecScalar(string sql)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
object o = cmd.ExecuteScalar();
conn.Close();
conn.Dispose();
return o;
}
/// <summary>
/// 针对 System.Data.OleDb.OleDbCommand.Connection 执行 SQL 语句并返回受影响的行数。
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecNoQuery(string sql)
{
OleDbConnection conn = this.CreateConnection();
OleDbCommand cmd = new OleDbCommand(sql, conn);
int ret = cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
return ret;
}
/// <summary>
/// 创建一个OleDbConnection连接.
/// </summary>
/// <returns></returns>
private System.Data.OleDb.OleDbConnection CreateConnection()
{
string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath;
OleDbConnection conn = new OleDbConnection(connStr);
if (conn.State != ConnectionState.Connecting) conn.Open();
return conn;
}
}
}
bllUser.cs
using System;
using System.Collections.Generic;
using System.Text;
using Models;
using DataAccessLayer;
using BusinessLogicLayer.Roles;
using System.Data;
namespace BusinessLogicLayer
{
/// <summary>
/// 用户的业务逻辑层
/// </summary>
public class bllUser
{
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user">用户对象</param>
/// <returns></returns>
public bool AddUser(TUser user)
{
//向数据库写入数据之前,检查数据的合法性。比如SQL注入,暴力注入等业务操作。
//如果数据是合法的,可以写入数据了。这种逻辑性操作,是不是属于业务逻辑的范畴呢?
UserRole.Validate(user);
return dalUser.Instance.AddUser(user);
}
public bool Login(string userID, string password)
{
//检查登录信息
UserRole.ValidateLogin(userID, password);
//调用数据访问层的接口检查用户登录
return dalUser.Instance.Login(userID, password);
}
public DataTable GetUsers()
{
return dalUser.Instance.GetUsers();
}
}
}
using System.Collections.Generic;
using System.Text;
using Models;
using DataAccessLayer;
using BusinessLogicLayer.Roles;
using System.Data;
namespace BusinessLogicLayer
{
/// <summary>
/// 用户的业务逻辑层
/// </summary>
public class bllUser
{
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user">用户对象</param>
/// <returns></returns>
public bool AddUser(TUser user)
{
//向数据库写入数据之前,检查数据的合法性。比如SQL注入,暴力注入等业务操作。
//如果数据是合法的,可以写入数据了。这种逻辑性操作,是不是属于业务逻辑的范畴呢?
UserRole.Validate(user);
return dalUser.Instance.AddUser(user);
}
public bool Login(string userID, string password)
{
//检查登录信息
UserRole.ValidateLogin(userID, password);
//调用数据访问层的接口检查用户登录
return dalUser.Instance.Login(userID, password);
}
public DataTable GetUsers()
{
return dalUser.Instance.GetUsers();
}
}
}
UserRole.cs
using System;
using System.Collections.Generic;
using System.Text;
using Models;
using DataAccessLayer;
namespace BusinessLogicLayer.Roles
{
/// <summary>
/// 用户规则。检查数据合法性。
/// </summary>
public class UserRole
{
public static void Validate(TUser user)
{
if (dalUser.Instance.ExistsUser(user.UserID))
throw new Exception("用户已经存在!");
}
public static void ValidateLogin(string userID, string password)
{
if (userID.Trim() == "")
throw new Exception("用户编号不正确或不能为空!");
if (password.Trim() == "")
throw new Exception("密码不正确或不能为空!");
}
}
}
using System.Collections.Generic;
using System.Text;
using Models;
using DataAccessLayer;
namespace BusinessLogicLayer.Roles
{
/// <summary>
/// 用户规则。检查数据合法性。
/// </summary>
public class UserRole
{
public static void Validate(TUser user)
{
if (dalUser.Instance.ExistsUser(user.UserID))
throw new Exception("用户已经存在!");
}
public static void ValidateLogin(string userID, string password)
{
if (userID.Trim() == "")
throw new Exception("用户编号不正确或不能为空!");
if (password.Trim() == "")
throw new Exception("密码不正确或不能为空!");
}
}
}
Msg.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Msg
/// </summary>
public class Msg
{
public static void Show(Page curPage, string msg)
{
curPage.ClientScript.RegisterStartupScript(curPage.GetType(),
"msg", "<script>alert(''''" + msg + "'''');</script>");
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Msg
/// </summary>
public class Msg
{
public static void Show(Page curPage, string msg)
{
curPage.ClientScript.RegisterStartupScript(curPage.GetType(),
"msg", "<script>alert(''''" + msg + "'''');</script>");
}
}
项目下载:

扫一扫加作者微信


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网